Oracle資料庫的用法
1、DATE可以和一個數字進行加減運算,相當於加減了指定的天數,返回值為對應的日期一週後是哪天?
SELECT SYSDATE + 7 FROM DUAL;
2、"TO_CHAR"(x)常用於轉換日期,可以將日期按照指定的日期格式轉換為字串
SELECT TO_CHAR(SYSDATE,
'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
3、--'03-09-01' 是2003-09-01的時間
SELECT TO_DATE('03-09-01', 'RR-MM-DD') FROM DUAL; SELECT TO_CHAR(TO_DATE ('03-09-01', 'RR-MM-DD'), 'YYYY-MM-DD') FROM DUAL;
4、"LAST_DAY"(date) 該函式返回給定日期所在月的最後一天(月底)
SELECT LAST_DAY(SYSDATE)
FROM dual;
5、檢視員工生日所在月的最後一天
SELECT NAME,LAST_DAY(BIRTH)
FROM EMP;
6、"LAST_DAY"(date) 該函式返回給定日期所在月的最後一天(月底)
SELECT LAST_DAY(SYSDATE)
FROM dual;
7、--"ADD_MONTHS"(date, i)對給定的日期加上指定的月數,若i為負數則是減去月數
SELECT NAME,ADD_MONTHS(BIRTH,12*20) FROM EMP;
8、--MONTHS_BETWEEN(date1, date2)計算兩個日期之間的月,計算方式是使用date1-date2的結果換算的檢視每個員工活了多少個月了?
SELECT NAME,MONTHS_BETWEEN
(SYSDATE, BIRTH)
FROM EMP;
9、--"NEXT_DAY"(date, ch)返回給定日期之後一週內的周幾,現在是2018-11-03 16:12:53”
SELECT NEXT_DAY(SYSDATE, 1)
FROM DUAL;
10、LEAST/GREATEST求最小值與最大值。這組函式的引數限制數量,兩個以上即可比較'2008-08-08'與當前的時間,返回小的值。
SELECT LEAST(SYSDATE,
TO_DATE('2008-08-08',
'YYYY-MM-DD'))
FROM DUAL;
11、--檢視所有員工的生日,若是82年以前出生的則顯示為1982-01-01
SELECT NAME,GREATEST
(BIRTH,TO_DATE('1982-01-01',
'YYYY-MM-DD'))
FROM EMP;
12、"EXTRACT"(time_unit FROM expr)獲取指定日期指定時間分量的值,以年為分割,取得年份
SELECT EXTRACT
(YEAR FROM SYSDATE)
FROM DUAL;
13、檢視81年出生的員工的資訊,這裡沒有符合條件的,所以返回的是空值
SELECT NAME,BIRTH
FROM EMP WHERE EXTRACT (YEAR FROM BIRTH) = 1981
14、--修改性別不為空的學生資訊,將其名字改為'無名氏' --判斷一個欄位的值是否為空,要使用 IS NULL 或 IS NOT NULL
UPDATE STUDENT
SET NAME = '無名氏'
WHERE GENDER IS NOT NULL;
SELECT * FROM STUDENT;
15、--NULL的運算、NULL與字串連線等於什麼也沒有做NULL與數字運算結果還是NULL檢視每個員工的月收入(薪水+獎金)
SELECT NAME,SALARY,COMM,SALARY+COMM
FROM EMP;
16、--NVL(p1,p2)若p1為null,函式則返回p2 ,若p1不為null,函式則返回p1本身,所以該函式的作用是將NULL值替換為非NULL值檢視每個員工的月收入
SELECT NAME,SALARY,COMM,
SALARY + NVL (COMM, 0) FROM EMP
17、"NVL2"(p1,p2,p3),當p1不為null時,函式返回p2,當p1為null時,函式返回p3,檢視每個員工的獎金情況: --若獎金不為空則顯示”有獎金“,若獎金為空則顯示”無獎金“
SELECT NAME,COMM,NVL2 (
COMM,'有獎金','無獎金'
)FROM EMP
18、-用NVL2實現NVL的功能、NVL2可以完全實現NVL的功能, --但是反過來卻不行、檢視每個員工的月收入
SELECT NAME,SALARY,COMM,
NVL2 (COMM, SALARY + COMM, SALARY)
FROM EMP