單行函數sql
包含:字符,數值,日期,轉換,通用express
字符函數
1.大小寫控制函數:這類函數改變字符的大小寫。函數
LOWER('SQL Course') sql course UPPER('SQL Course') SQL COURSE INITCAP('SQL Course') Sql Course
示例:測試
SELECT employee_id, last_name, department_id FROM employees WHERE lower(last_name) = 'higgins';
2.字符控制函數spa
CONCAT('Hello', 'World') HelloWorld SUBSTR('HelloWorld',1,5) Hello LENGTH('HelloWorld') 10 INSTR('HelloWorld', 'W') 6 LPAD(salary,10,'*') *****24000 //第一個參數是須要處理的字符串,第二個參數是須要將字符串擴充的寬度,第三個參數表示加寬部分用什麼字符來作填補,第三個參數的默認值爲空格,但也能夠是單個的字符或字符串 RPAD(salary, 10, '*') 24000***** //同上 TRIM('H' FROM 'HelloWorld') elloWorld REPLACE(‘abcd’,’b’,’m’) amcd
示例:3d
SELECT employee_id, concat(first_name,last_name) name, job_id, length(last_name), instr(last_name,'a') "Contains 'a'?" FROM employees WHERE substr(job_id,4) = 'REP';
數字函數
code
ROUND: 四捨五入 ROUND(45.926, 2) 45.93 TRUNC: 截斷 TRUNC(45.926, 2) 45.92 MOD: 求餘 MOD(1600, 300) 100 SELECT round(45.923,2), round(45.923,0), round(45.923,-1) FROM dual;
示例:orm
SELECT trunc(45.923,2), trunc(45.923), trunc(45.923,-2) FROM dual;
示例:對象
SELECT last_name, salary, mod(salary,5000) FROM employees WHERE job_id = 'SA_REP';
日期
blog
SELECT last_name, hire_date FROM employees WHERE last_name LIKE 'G%';
函數SYSDATE 返回:
日期
時間
日期的數學運算
示例:
SELECT last_name, ( SYSDATE - hire_date ) / 7 AS weeks FROM employees WHERE department_id = 90;
日期函數
函數 | 描述 |
ONTHS_BETWEEN | 兩個日期相差的月數 |
ADD_MONTHS | 向指定日期中加上若干月數 |
NEXT_DAY | 指定日期的下一個星期 * 對應的日期 |
LAST_DAY | 本月的最後一天 |
ROUND | 日期四捨五入 |
TRUNC | 日期截斷 |
MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') -》19.6774194 ADD_MONTHS ('11-JAN-94',6) -》'11-JUL-94' NEXT_DAY ('01-SEP-95','FRIDAY') -》'08-SEP-95' LAST_DAY('01-FEB-95') -》'28-FEB-95'
轉換函數:隱 性 和顯性
隱式數據類型轉換:
Oracle 自動完成下列轉換:
源數據類型 | 目標數據類型 |
VARCHAR2 or CHAR | NUMBER |
VARCHAR2 or CHAR | DATE |
NUMBER | VARCHAR2 |
DATE | VARCHAR2 |
data<--> VARCHAR2<--> number
顯式數據類型轉換 :
TO_CHAR函數對日期的轉換
TO_CHAR(date, 'format_model')
格式:
示例:
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh:mi:ss') FROM dual;
日期格式的元素
YYYY | 2004 |
YEAR | TWO THOUSAND AND FOUR |
MM | 02 |
MONTH | JULY |
MON | JUL |
DY | MON |
DAY | MONDAY |
DD | 02 |
日期格式的元素
HH24:MI:SS AM 15:45:32 PM
使用雙引號向日期中添加字符
DD "of" MONTH 12 of OCTOBER
TO_CHAR 函數對日期的轉換
SELECT last_name, TO_CHAR(hire_date,'DD Month YYYY') AS hiredate FROM employees;
示例
SELECT employee_id, last_name, hire_date FROM employees WHERE TO_CHAR(hire_date,'yyyy-mm-dd') = '1987-09-17';
TO_DATE 函數對字符的轉換
使用 TO_DATE :
TO_DATE(char[, 'format_model'])
使用 TO_DATE 函數將字符轉換成數字:
TO_DATE(‘2012年10月29日 08:10:21’,’yyyy「年」mm」月」dd「日」hh:mi:ss’) From dual
TO_CHAR 函數中常用的幾種格式:
9 |
數字 |
0 | 零 |
$ | 美圓符 |
L | 本地貨幣符號 |
. | 小數點 |
, | 千位符 |
示例
SELECT TO_CHAR(salary,'$99,999.00') salary FROM employees WHERE last_name = 'Ernst';
TO_NUMBER 函數對字符的轉換
TO_NUMBER(char[, 'format_model'])
使用 TO_NUMBER :
TO_NUMBER(‘¥1,234,567,890.00’,’L999,999,999,999.99’) from dual
通用函數
這些函數適用於任何數據類型,同時也適用於空值:
NVL (expr1, expr2) NVL2 (expr1, expr2, expr3) NULLIF (expr1, expr2) COALESCE (expr1, expr2, ..., exprn)
NVL 函數
函數的通常形式:
示例:
SELECT last_name, salary, nvl(commission_pct,0), ( salary * 12 ) + ( salary * 12 * nvl(commission_pct,0) ) an_sal FROM employees;
使用 NVL2 函數
示例:
SELECT last_name, salary, commission_pct, nvl2(commission_pct,'SAL+COMM','SAL') income FROM employees WHERE department_id IN ( 50, 80 );
使用 NULLIF 函數
SELECT first_name, length(first_name) "expr1", last_name, length(last_name) "expr2", nullif(length(first_name),length(last_name) ) result FROM employees;
使用 COALESCE 函數
SELECT last_name, commission_pct, salary, coalesce(commission_pct,salary,1) comm FROM employees ORDER BY commission_pct;
條件表達式
使用兩種方法:
CASE 表達式
CASE expr WHEN comparison_expr1 THEN return_expr1 [WHEN comparison_expr2 THEN return_expr2 WHEN comparison_exprn THEN return_exprn ELSE else_expr] END
示例:
SELECT last_name, job_id, salary, CASE job_id WHEN 'IT_PROG' THEN 1.10 * salary WHEN 'ST_CLERK' THEN 1.15 * salary WHEN 'SA_REP' THEN 1.20 * salary ELSE salary END "REVISED_SALARY" FROM employees;
DECODE 函數
DECODE(col|expression, search1, result1 , [, search2, result2,...,] [, default])
示例
SELECT last_name, job_id, salary, DECODE(job_id,'IT_PROG',1.10 * salary,'ST_CLERK',1.15 * salary,'SA_REP',1.20 * salary,salary) AS revised_salary FROM employees;
示例:
SELECT last_name, salary, DECODE(trunc(salary / 2000,0),0,0.00,1,0.09,2,0.20,3,0.30,4,0.40,5,0.42,6,0.44,0.45) tax_rate FROM employees WHERE department_id = 80;
嵌套函數
示例
SELECT last_name, nvl(TO_CHAR(manager_id),'No Manager') FROM employees WHERE manager_id IS NULL;