1. 程式人生 > >SQL日期、轉換、通用函式

SQL日期、轉換、通用函式

日期函式
1、當前系統時間
SELECT SYSDATE FROM dual ;
2、修改日期顯示格式
ALTER SESSION SET NLS_DATE_FORMAT=‘yyyy-mm-dd hh24:mi:ss’;
SELECT SYSDATE FROM dual ;
3、日期函式運算
日期-數字=日期
日期+數字=日期
日期-日期=數字(天數)
SELECT SYSDATE + 3 FROM dual ;三天之後的日期
SELECT SYSDATE - 3 FROM dual ;三天之前的日期
SELECT SYSDATE-hiredate FROM emp; 僱傭天數(出現小數)
SELECT trunc(SYSDATE-hiredate)from emp;僱傭天數
4、日期操作
(1)ADD_MONTHS(日期,數字) 在指定的日期上加入指定的月數,求出新的日期
SELECT SYSDATE,ADD_MONTHS(SYSDATE, 3 ) FROM dual ;三個月之後的日期 ,
SELECT SYSDATE,ADD_MONTHS(SYSDATE, -3 ) FROM dual ;三個月之前的日期 ,
(2)MONTHS_BETWEEN(日期1,日期2) 兩個日期間的月份數
SELECT TRUNC(MONTHS_BETWEEN(sysdate,hiredate))FROM emp;僱傭總月數
SELECT TRUNC(MONTHS_BETWEEN(sysdate,hiredate)/12)FROM emp;僱傭總年數
檢視僱傭資訊
SELECT TRUNC(MONTHS_BETWEEN(sysdate,hiredate)/12) 已僱傭年數,
TRUNC(MOD(MONTHS_BETWEEN(sysdate,hiredate),12)) 已僱傭月數,
TRUNC(sysdate-ADD_MONTHS(hiredate,MONTHS_BETWEEN(sysdate,hiredate))) 已僱傭天數
FROM emp ;
(3)NEXT_DAY(日期,星期數) 求出下一個星期X的具體日期
SELECT SYSDATE,NEXT_DAY(SYSDATE,‘星期日’) FROM dual ;下一個星期日
(4)LAST_DAY(日期) 指定日期的最後一天的日期
SELECT SYSDATE, LAST_DAY(SYSDATE) FROM dual ; 當前日期所在月的最後一天
(5)EXTRACT(格式FROM資料) 抽取日期資訊
SELECT EXTRACT(YEAR FROM DATE ‘2001-09-19’) years ,
EXTRACT(MONTH FROM DATE ‘2001-09-19’) months ,
EXTRACT(DAY FROM DATE ‘2001-09-19’) days
FROM dual ;
(6)計算複雜時間間隔
SELECT
EXTRACT(DAY FROM TO_TIMESTAMP(‘1982-08-13 12:17:57’,‘yyyy-mm-dd hh24:mi:ss’)
-TO_TIMESTAMP(‘1981-09-27 09:08:33’,‘yyyy-mm-dd hh24:mi:ss’)) days
FROM dual ;

轉換函式
(1)TO_CHAR(日期|數字|列,轉換格式)
將制定的資料按照指定的格式變為字串型
SELECT SYSDATE 當前系統時間,TO_CHAR(SYSDATE,‘YYYY-MM-DD’) 格式化日期,
TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS’) 格式化日期時間,
TO_CHAR(SYSDATE,‘FMYYYY-MM-DD HH24:MI:SS’) 去掉前導0的日期時間
FROM dual ;

(2)TO_DATE(字串|列,轉換格式)
將制定的字串按照指定的格式變為日期型
SELECT TO_DATE(‘1979-09-19’,‘YYYY-MM-DD’) FROM dual ;
SELECT TO_TIMESTAMP(‘1981-09-27 18:07:10’,‘YYYY-MM-DD HH24:MI:SS’) datetime
FROM dual ;

(3)TO_NUMBER(字串|列)
將指定的資料型別變為數字型
SELECT TO_NUMBER(‘09’) + TO_NUMBER(‘19’) 加法計算,
TO_NUMBER(‘09’) * TO_NUMBER(‘19’) 乘法計算
FROM dual ;

通用函式
(1)NVL(數字|列,預設值)
如果現實的數字是null,則使用預設值表示
SELECT NVL(null,0),NVL(3,0) FROM dual ; 如果是NULL輸出後面的預設值,如果不是NULL輸出第一個引數值
在這裡插入圖片描述
(2)NVL2(數字|列,返回結果1,返回結果2)
判斷指定的列是否為null,如果不為null則返回1,如果為空則返回結果2.
當comm不為NULL輸出sal+comm,如果為NULL輸出sal。
在這裡插入圖片描述


(3)NULLIF(表示式1,表示式2)
比較表示式1和表示式2的結果是否相等,如果相等返回NULL,如果不等返回表示式1
在這裡插入圖片描述
(4)DECODE(列|值,判斷值1,顯示結果1,判斷值2,顯示結果2…)如果現實的數字是null,則使用預設值表示
job為CLERK 顯示業務員,job為SALESMAN顯示銷售人員…
在這裡插入圖片描述
(5)CASE 列| 數值WHEN 表示式1 THEN 顯示結果1…ELSE 表示式n…用於實現多條件判斷
當job為CLERK sal1.1 當job 為SALESMAN sal1.2…
在這裡插入圖片描述
(6)COALESCE(表示式1,表示式2,…,表示式n)
將表示式逐個判斷,如果表示式1的內容是null,則顯示錶達式2,如果表示式2的內容是null,則顯示錶達式3
SELECT comm ,COALESCE(comm,100,2000) , COALESCE(comm,null,2000) FROM emp;
當comm為NULL顯示100,當comm和null顯示2000
在這裡插入圖片描述