Sql Certificate 简明教程
SQL - Using Single-Row Functions
Using Single row functions to customize output
Oracle SQL 提供了一个丰富的内置函数库,可用于完成各种任务。函数的基本功能可以是字符串的大小写转换、字符串或子字符串操作、对数字数据的数学计算以及对日期类型值的日期操作。SQL 函数可以选择接收用户的参数,并强制返回一个值。
在更广泛的类别中,有两种类型的功能:-
Single Row functions - 单行函数是对单行执行操作并针对每行返回一个输出的函数。例如,长度和大小写转换函数是单行函数。
*多行函数 * - 多行函数对组行执行操作,并针对整组行返回一个结果。它们也称为组函数。
Single row functions
单行函数可以是字符函数、数字函数、日期函数和转换函数。注意,这些函数用于处理数据项。这些函数需要一个或多个输入参数并在每一行上运算,从而针对每一行返回一个输出值。参数可以是列、文字或表达式。单行函数可以用于 SELECT 语句、WHERE 和 ORDER BY 子句。单行函数可以是 -
-
General functions - 通常包含 NULL 处理函数。此类别下的函数有 NVL、NVL2、NULLIF、COALESCE、CASE 和 DECODE。
-
Case Conversion functions - 接受字符输入并返回字符值。此类别下的函数有 UPPER、LOWER 和 INITCAP。UPPER 函数将字符串转换为大写。LOWER 函数将字符串转换为小写。INITCAP 函数只将字符串的第一个字母转换为大写。
.
-
Character functions - 接受字符输入并返回数字或字符值。此类别下的函数有 CONCAT、LENGTH、SUBSTR、INSTR、LPAD、RPAD、TRIM 和 REPLACE。CONCAT 函数连接两个字符串值。LENGTH 函数返回输入字符串的长度。SUBSTR 函数从给定的起始点到终止点返回一部分字符串。INSTR 函数返回字符或字符串在给定字符串中的数字位置。LPAD 和 RPAD 函数将给定字符串填充到特定长度,并使用给定字符填充。TRIM 函数修剪起始或终止处的字符串输入。REPLACE 函数用给定字符替换输入字符串中的字符。
-
Date functions - 日期算术运算返回日期或数字值。此类别下的函数有 MONTHS_BETWEEN、ADD_MONTHS、NEXT_DAY、LAST_DAY、ROUND 和 TRUNC。MONTHS_BETWEEN 函数返回两个日期之间的月份数量。ADD_MONTHS 函数向输入日期中添加“n”个月份。NEXT_DAY 函数返回指定日期的下一天。LAST_DAY 函数返回输入日期所属月份的最后一天。ROUND 和 TRUNC 函数用于舍入和截断日期值。
-
Number functions - 接受数字输入并返回数字值。此类别下的函数有 ROUND、TRUNC 和 MOD。ROUND 和 TRUNC 函数用于舍入和截断数字值。MOD 用于返回两个数字的除法运算的余数。
Illustrations
General functions
下面的 SELECT 查询演示了 NVL 函数的用法。
SELECT first_name, last_name, salary, NVL (commission_pct,0)
FROM employees
WHERE rownum < 5;
FIRST_NAME LAST_NAME SALARY NVL(COMMISSION_PCT,0)
-------------------- ------------------------- ---------- ---------------------
Steven King 24000 0
Neena Kochhar 17000 0
Lex De Haan 17000 0
Alexander Hunold 9000 0
Case Conversion functions
下面的 SELECT 查询演示了类型转换函数的使用。
SELECT UPPER (first_name), INITCAP (last_name), LOWER (job_id)
FROM employees
WHERE rownum < 5;
UPPER(FIRST_NAME) INITCAP(LAST_NAME) LOWER(JOB_
-------------------- ------------------------- ----------
STEVEN King ad_pres
NEENA Kochhar ad_vp
LEX De Haan ad_vp
ALEXANDER Hunold it_prog
Character functions
下面的 SELECT 查询演示了使用 CONCAT 函数来连接两个字符串值。
SELECT CONCAT (first_name, last_name)
FROM employees
WHERE rownum < 5;
CONCAT(FIRST_NAME,LAST_NAME)
--------------------------------
EllenAbel
SundarAnde
MozheAtkinson
DavidAustin
下面的 SELECT 查询演示了使用 SUBSTR 和 INSTR 函数。SUBSTR 函数从第 1 个位置返回输入字符串到第 5 个位置的部分。INSTR 函数返回姓氏中字符“a”的数字位置。
SELECT SUBSTR (first_name,1,5), INSTR (first_name,'a')
FROM employees
WHERE rownum < 5;
SUBST INSTR(FIRST_NAME,'A')
----- ---------------------
Ellen 0
Sunda 5
Mozhe 0
David 2
下面的 SELECT 查询演示了使用 LPAD 和 RPAD 来美化打印员工和职位信息。
SELECT RPAD(first_name,10,'_')||LPAD (job_id,15,'_')
FROM employees
WHERE rownum < 5;
RPAD(FIRST_NAME,10,'_')||
-------------------------
Steven____________AD_PRES
Neena_______________AD_VP
Lex_________________AD_VP
Alexander_________IT_PROG
Number functions
下面的 SELECT 查询演示了使用 ROUND 和 TRUNC 函数。
SELECT ROUND (1372.472,1)
FROM dual;
ROUND(1372.472,1)
-----------------
1372.5
SELECT TRUNC (72183,-2)
FROM dual;
TRUNC(72183,-2)
---------------
72100
Date arithmetic operations
下面的 SELECT 查询显示了一个日期算术函数,其中执行员工招聘日期和 sysdate 之间的差值。
SELECT employee_id, (sysdate - hire_date) Employment_days
FROM employees
WHERE rownum < 5;
EMPLOYEE_ID EMPLOYMENT_DAYS
----------- ---------------
100 3698.61877
101 2871.61877
102 4583.61877
103 2767.61877
Date functions
下面的 SELECT 查询演示了使用 MONTHS_BETWEEN、ADD_MONTHS、NEXT_DAY 和 LAST_DAY 函数。
SELECT employee_id, MONTHS_BETWEEN (sysdate, hire_date) Employment_months
FROM employees
WHERE rownum < 5;
EMPLOYEE_ID EMPLOYMENT_MONTHS
----------- -----------------
100 121.504216
101 94.3751837
102 150.633248
103 90.9558289
SELECT ADD_MONTHS (sysdate, 5), NEXT_DAY (sysdate), LAST_DAY (sysdate)
FROM dual;
ADD_MONTH NEXT_DAY( LAST_DAY(
--------- --------- ---------
01-JAN-14 05-AUG-13 31-AUG-13