[SQL][概念][函數]單列-轉換函數與排序函數概念

轉換函數(Conversion Functions)有兩個類型

  1. Implicit隱性資料型態轉換
  2. Explict顯性資料型態轉換

排序函數有三種

  1. ROW_NUMBER 
  2. RANK 
  3. DENSE_RANK 

 

Implicit資料型態轉換函數

  • Assignments敘述時,自動轉換下列
FROM TO
VARCHAR or CHAR INT
VARCHAR or CHAR DATE
INT VARCHAR
DATE VARCHAR
  • Expression 敘述時,自動轉換下列
FROM TO
VARCHAR or CHAR INT
VARCHAR or CHAR DATE

EXPLICIT資料型態轉換函數

  • 語法1:CAST (EXPRESSION AS 欲轉換之型態寬度)顯性
--Implict VS Explict 轉換
SELECT  2 + '3' 
SELECT  2 + CAST( '3' AS  INT)  

  • 語法2:CONVERT(欲轉專型態(寬度),EXPRESSION , 樣式)

日期樣式(style):  101  mm/dd/yyy
                            102 yy.mm.dd 

還有更多可以線上查到

--轉換 員工之  hire_date 日期格式

SELECT  last_name, hire_date,  
        CONVERT ( VARCHAR ( 40 ),   hire_date, 102  )   AS  HIREDATE
FROM    employees;

  • Case函數,情況判斷函數
--轉換 員工 commission_pct 空值者轉為 0

SELECT last_name, salary, commission_pct,  ISNULL( commission_pct,  0 )
FROM   employees;

--CASE函數 依 員工 job_id  調整 salary

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;

--CASE函數另一種寫法 依 員工 job_id  調整 salary
SELECT   last_name,  job_id,  salary,
         CASE  WHEN job_id  = 'IT_PROG'  THEN  1.10 * salary
               WHEN job_id  = 'ST_CLERK' THEN  1.15 * salary
               WHEN job_id  ='SA_REP'    THEN  1.20 * salary
               ELSE      salary 
         END     "REVISED_SALARY"
  FROM   employees;

排序函數

  • ROW_NUMBER :由高到低排序,一樣仍然繼續排下來
  • RANK :由高至低排序,遇到一樣,兩個印出並跳過下一名
  • DENSE_RANK :由高至低排序,遇到一樣,兩個印出並接著印出下一名
--ROW_NUMBER 函數, 依 員工 薪資 salary 排行, 從 高到低
SELECT  last_name,  SALARY ,  
        ROW_NUMBER() OVER  ( ORDER BY salary  DESC)
FROM    employees

--RANK 函數, 依 員工 薪資 salary 排行, 從 高到低
SELECT  last_name,  SALARY ,  
        RANK() OVER  ( ORDER BY salary  DESC)
FROM    employees

--DENSE_RANK 函數, 依 員工 薪資 salary 排行, 從 高到低
SELECT  last_name,  SALARY ,  
        DENSE_RANK() OVER  ( ORDER BY salary  DESC)
FROM    employees