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