運算子及函數

運算子與函數可以讓你利用欄位的數值 , 系統決定的數值、常數以及其他資料計算結果。


1. 建立衍生欄位

Select au_thor , 2 + 3 from authors 2+3即為一衍生欄位 , 不用AS指定名稱時 , "2+3" 即為欄位名稱,因為你的DBMS通常會以運算式本身為衍生欄位指定名稱 , 如果要另外指定時 , 就利用 AS 產生別名,此結果的值為 5。
Select au_thor , 2+3 As "Count" from authors Count 為一衍生欄位 , 利用AS指定名稱
Select 2+3 此行可直接執行 , 結果為 5


2. 進行算數運算

 -   +   +   -   *   /
  • 負、正、加、減、乘 、除
  • 負號改變數字的正負,而正號通常沒有多大作用
  • SELECT title_id , -Advance As "AdvancesC" FROM royalties ;
  •  0 並沒有正負號 (即不是正數也不是負數)
  • 與 空值 相關的任何數學運算結果都為空值。
  • 在算數運算式混用數字型態 (int 與 float 相加) , DBMS會轉換或強制為最複雜的運算元狀態 (如 float) , 處理完後傳回 float 型態的數值 , 所以有時須用 CAST( )轉換型態。
  • 在UPDATE列時 ,有些算數運算所產生的結果並不符合封閉性。如兩個smallint相加會超出smallint的資料範圍 , 同樣的 , 兩個 int 相除不一定是int
  • 有時DBMS會強制要求數學封閉性 , Access 不會 , Microsoft SQL Server會 ,所以在SQL Server 中 int 相除的小數會被去除


3. 決定執行順序

 +   - 正 負
 *   / 乘 除
 +   - 加 減
= <> < <= > >=  
Not  
And  
OR  


4. 利用 | | 連接字串

Select fname || ' ' ||  lname As "Name"
  • 'a' || NULL || 'b' 結果為空值 , (有例外的情況.好像Oracle不一樣)
  • 如果要連結非字串的變數時 , 須用Cast作資料轉換
  • Access  的連結字元是 + 而轉換函數為 Format(string)
Select Name From table
    Where ( Lname || " " || Fname ) =   "Sen lin"
 


5. 利用SUBSTRING( )擷取子字串

Select SubString(string From start  [For Length] )
Select SubString(columns From 1 For 1)  
  Access   的擷取子字串為 Mid (  string , start [,Length] )
  MS SQL 的擷取子字串 Substring (string , star , Length)
   


6. 利用Upper( ) Lower( )修改字串的大小寫

Select Upper( columns ) As "Upper" from Access 為Ucase ( ) 與 Lcase ( )

大小寫只對字母有作用 , 對數字 , 標點符號與空白字元與空字串均不受影響。

Where Upper( title_name ) Like "%MO%"
 


7. 利用 TRIM( ) 修整字元

Trim ( [ [Leading  |  Trailing  |  Both]              From  ]  String )    去除空白
Trim ( [ [Leading  |  Trailing  |  Both]   'char'   From  ]  String )    去除某個字元
Leading 去除開頭空白
Trailing
Both 開頭及空白 (預設)
修改字串中的字元
Trim ( Leading 'H'  From Au_name ) As "TrimmedName" 去除字串中開頭為H的字母
Trim (title_id) Like 'T1_'  
  Access
Ltrim(string)為去除結尾空白
Rtrim(string)為去除開頭
Trim (string)為去除兩端空白

SQL Server
LTRIM(string)
RTRIM(string)


8. 利用 Character_Length ( ) 計算字串長度

Character_Length ( string )
  • Character_Length ( )傳回 0 以上的數字
  • Character_Length ( ) 是計算字元 , 而不是計算位元組
  • 空字串長度為 0
  • 傳入為Null 傳出也是 Null
  • Access
    Len (
    string
    )
  • SQL Server
    Length ( string )
    BIT_LENGTH(
    傳回運算式的位元數 )
    OCTET_LENGTH(
    傳回運算式的位元組數目
    )
  • 八個位元等於一個位元組


9. 利用Position ( )找出子字串

  Position (  'e'  IN  au_fname  )
  • 傳回整數( >=0 )表示該子字串第一次出現的位置
  • 如果沒有符合的子字串 , 傳回 0
  • 大小寫一樣是取決於DBMS
  • 空字串中任何子字串位置都為 0
  • 參數為空值時 , 也會傳回空值
  • Access
    Instr ( 1 , au_fname  , 'em'
    )
  • SQL Server
    CHARINDEX ( 'e' , au_fname )


10. 進行日期時間與差距運算

Select title_id, pubdate From titles
  • ACCESS 與 MS SQL 為
    DatePart (
    "yyyy" | "m" | "d" , datetime )
  • DateDIFF ( )
  Where Extract(YEAR From pubdate)
     Between 2001 And 2002
     And Extract(MONTH FROM pubdate)
     Between 1 AND 6
Order BY pubdate DESC;
 


11. 取得目前日期與時間

CURRENT_DATE
  • ACCESS
    Date ( )
    Time ( )
    Now ( )
  • SQL Server
    CURRENT_TIMESTAMP    = Now( )
    GETDATE ( )
CURRENT_TIME
CURRENT_TIMESTAMP
Acess的範例
Select title_id, pubdate
  FROM Titles
  WHERE pubdate
  Between Now( ) - 90 And Now( ) +90
 


1. 取得使用者資訊

CURRENT_USER
  • ACCESS
    CurrentUser ( )
  • SQL Server
    SESSION_USER ( )
    SYSTEM_USER ( )

 

Select Current_User AS "User"


1. 使用cast( )轉換資料型態

CAST ( ex AS data_type)
  • 可將數字及時間轉換成字串
  • 將字串轉換為數字或日期時 , DBMS會自動去除開頭及結尾的空白
  • 有些數字型態的轉換 , 會執行進位或拾去 (視DBMS)而定
  • varchar - to char 的操作可能會裁減字串。
  • Date --> TimeStamp的時間值為 00:00:00
  • 如果傳回為空值 , 傳回值也是空值。

 

Access有一系列的型態轉換函式
Cstr ( )、CInt ( )、CDec ( )

SQL Server也是用CAST ( )