Oracle系列四 單行函數查詢語句

單行函數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;
  • 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

  • Oracle 中的日期型數據實際含有兩個值: 日期和時間。
SELECT
    last_name,
    hire_date
FROM
    employees
WHERE
    last_name LIKE 'G%';


函數SYSDATE 返回:
日期
時間


日期的數學運算

  • 在日期上加上或減去一個數字結果仍爲日期。
  • 兩個日期相減返回日期之間相差的天數。
  • 日期不容許作加法運算,無心義
  • 能夠用數字除24來向日期中加上或減去天數。

示例:

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函數對數字的轉換
  • TO_CHAR(number, 'format_model')

TO_CHAR 函數中常用的幾種格式:


9   
數字
0  零
$ 美圓符
L 本地貨幣符號
. 小數點
, 千位符



示例

SELECT
    TO_CHAR(salary,'$99,999.00') salary
FROM
    employees
WHERE
    last_name = 'Ernst';



TO_NUMBER 函數對字符的轉換

  • 使用 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 函數

  • 將空值轉換成一個已知的值
  • 能夠使用的數據類型有日期、字符、數字。

函數的通常形式:

  • NVL(commission_pct,0)
  • NVL(hire_date,'01-JAN-97')
  • NVL(job_id,'No Job Yet')

示例:

SELECT
    last_name,
    salary,
    nvl(commission_pct,0),
    ( salary * 12 ) + ( salary * 12 * nvl(commission_pct,0) ) an_sal
FROM
    employees;




使用 NVL2 函數

  • NVL2 (expr1, expr2, expr3) : expr1不爲NULL,返回expr2;爲NULL,返回expr3。
  • exp1 != null ? exp2 : exp3


示例:

SELECT
    last_name,
    salary,
    commission_pct,
    nvl2(commission_pct,'SAL+COMM','SAL') income
FROM
    employees
WHERE
    department_id IN (
        50,
        80
    );




使用 NULLIF 函數

  • NULLIF (expr1, expr2) :  相等返回NULL,不等返回expr1

 

SELECT
    first_name,
    length(first_name) "expr1",
    last_name,
    length(last_name) "expr2",
    nullif(length(first_name),length(last_name) ) result
FROM
    employees;



使用 COALESCE 函數

  • COALESCE 與 NVL 相比的優勢在於 COALESCE 能夠同時處理交替的多個值。
  • 若是第一個表達式爲空,則返回下一個表達式,對其餘的參數進行COALESCE 。
SELECT
    last_name,
    commission_pct,
    salary,
    coalesce(commission_pct,salary,1) comm
FROM
    employees
ORDER BY
    commission_pct;



條件表達式

  • 在 SQL 語句中使用IF-THEN-ELSE 邏輯


使用兩種方法:

  •     CASE 表達式
  •     DECODE 函數



CASE 表達式

  • 在須要使用 IF-THEN-ELSE 邏輯時:
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 函數

  • 在須要使用 IF-THEN-ELSE 邏輯時:
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;

相關文章
相關標籤/搜索