本手冊系統整理 SQL Server 2005 四大類核心內建函數,採「語法→參數→範例→說明」標準化格式,附帶資料類型優先級規則與日期格式代碼表,供開發查閱與教學參考。
| 函數 | 語法 | 範例 | 說明 |
|---|---|---|---|
| ASCII | ASCII(char_expr) | ASCII('abc') → 97 | 回傳最左字元 ASCII 碼 |
| CHAR | CHAR(int_expr) | CHAR(100) → 'd' | ASCII 碼轉字元 (0-255),超出回傳 NULL |
| CHARINDEX | CHARINDEX(expr1, expr2 [,start]) | CHARINDEX('ab','BCabTabD') → 3 CHARINDEX('ab','BCabTabD',4) → 6 | 尋找子字串位置,可指定起始位置,找不到回傳 0 |
| DIFFERENCE | DIFFERENCE(expr1, expr2) | DIFFERENCE('Green','Greene') → 4 | 0-4 相似度,4 最高 (SOUNDEX 差異) |
| LEFT | LEFT(expr, len) | LEFT('abcdefg',2) → 'ab' | 左側擷取指定長度 |
| RIGHT | RIGHT(expr, len) | RIGHT('abcdefg',2) → 'fg' | 右側擷取指定長度 |
| LEN | LEN(expr) | LEN('abcdefg') → 7 LEN('abcdefg ') → 7 | 字元數,不含尾隨空格 |
| LOWER/UPPER | LOWER/UPPER(expr) | LOWER('ABC') → 'abc' | 大小寫轉換 |
| LTRIM/RTRIM | LTRIM/RTRIM(expr) | LTRIM(' abc') → 'abc' | 移除前導/尾隨空格 |
| PATINDEX | PATINDEX('%pattern%', expr) | PATINDEX('%ab%','123ab456') → 4 PATINDEX('ab%','123ab456') → 0 | 支援萬用字元 % _,首字元通常需 % |
| REVERSE | REVERSE(expr) | REVERSE('abcde') → 'edcba' | 字串反轉 |
| SPACE | SPACE(int) | 'a'+SPACE(2)+'b' → 'a b' | 產生指定數量空格 |
| STR | STR(float [,len[,dec]]) | STR(123.451,7,3) → '123.451' STR(123.451,5,3) → '123.5' (四捨五入) | 數字轉字串,預設長度 10,不足左補空格,超長右截斷 |
| STUFF | STUFF(expr1, start, len, expr2) | STUFF('abcdef',2,2,'123') → 'a123def' | 刪除指定長度並插入新字串 |
| SUBSTRING | SUBSTRING(expr, start, len) | SUBSTRING('abcdef',2,2) → 'bc' | 擷取子字串 |
| REPLACE | REPLACE(expr1, expr2, expr3) | REPLACE('abcttabchhabc','abc','123') → '123tt123hh123' | 全域替換所有匹配項 |
| 函數 | 語法 | 範例 | 說明 |
|---|---|---|---|
| DATEADD | DATEADD(datepart, number, date) | DATEADD(year,45,'1990-12-11') → 2035-12-11 DATEADD(hh,12,'1990-12-11') → 1990-12-11 12:00:00 | 日期加減間隔,number 非整數捨去小數 |
| DATEDIFF | DATEDIFF(datepart, start, end) | DATEDIFF(yy,'1990-12-11','2008-9-10') → 18 | 結束減開始,回傳整數差值 |
| DATENAME | DATENAME(datepart, date) | DATENAME(mm,'2007-12-11') → '12' DATENAME(dw,'2007-12-11') → '星期二' | 回傳字串形式日期部分 |
| DATEPART | DATEPART(datepart, date) | DATEPART(dw,'2007-12-11') → 3 (週日=1) | 回傳整數形式日期部分 |
| GETDATE | GETDATE() | 2009-04-28 18:57:24.153 | 當前系統日期時間 |
| DAY/MONTH/YEAR | DAY/MONTH/YEAR(date) | DAY('2007-12-11') → 11 | 等價 DATEPART(dd/mm/yy, date) |
| GETUTCDATE | GETUTCDATE() | 格林威治時間 | UTC 標準時間 |
| 日期部分 | 含義 | 縮寫 |
|---|---|---|
| year | 年 | yy, yyyy |
| quarter | 季 | qq, q |
| month | 月 | mm, m |
| dayofyear | 年內天數 | dy, y |
| day | 天 | dd, d |
| week | 週 | wk, ww |
| weekday | 星期 | dw, w |
| hour | 時 | hh |
| minute | 分 | mi, n |
| second | 秒 | ss, s |
| millisecond | 毫秒 | ms |
| 函數 | 語法 | 範例 | 說明 |
|---|---|---|---|
| ABS | ABS(num) | ABS(-23.4) → 23.4 | 絕對值 |
| PI | PI() | 3.14159265358979 | π 常數 |
| COS/SIN/TAN/COT | COS/SIN/TAN/COT(float) | COS(PI()/3) → 0.5 | 三角函數,參數為弧度 |
| ACOS/ASIN/ATAN | ACOS/ASIN/ATAN(float) | ACOS(0.5) → 1.047... | 反三角函數,回傳弧度 |
| DEGREES | DEGREES(num) | DEGREES(PI()/4) → 45 | 弧度轉角度 |
| RADIANS | RADIANS(num) | RADIANS(180.0) → 3.14159... | 角度轉弧度,整數輸入會截斷小數 |
| EXP | EXP(float) | EXP(4) → 54.598... | e 的 n 次方 |
| LOG | LOG(float) | LOG(6) → 1.7917... | 自然對數 (底 e) |
| LOG10 | LOG10(float) | LOG10(100) → 2 | 常用對數 (底 10) |
| CEILING | CEILING(num) | CEILING(5.44) → 6 CEILING(-8.44) → -8 | 大於等於的最小整數 |
| FLOOR | FLOOR(num) | FLOOR(5.44) → 5 FLOOR(-8.44) → -9 | 小於等於的最大整數 |
| POWER | POWER(x, y) | POWER(5,2) → 25 | x 的 y 次方 |
| SQRT | SQRT(num) | SQRT(25) → 5 | 平方根 |
| SIGN | SIGN(num) | SIGN(6)→1, SIGN(-6)→-1, SIGN(0)→0 | 正負零判斷 |
| RAND | RAND([seed]) | RAND(100) → 0.715... (固定種子結果固定) | 0-1 隨機浮點數 |
| ROUND | ROUND(num, len [,func]) | ROUND(1236.555,2) → 1236.560 ROUND(1236.555,2,1) → 1236.550 (截斷) ROUND(1236.555,-1) → 1240.000 | 捨入,len 正=小數位,負=整數位;func=0 四捨五入,非 0 截斷 |
| 函數 | 語法 | 範例 | 差異 |
|---|---|---|---|
| CONVERT | CONVERT(data_type[(len)], expr[, style]) | CONVERT(nvarchar, GETDATE(), 120) → '2009-04-28 12:22:21' CONVERT(nvarchar(10), GETDATE(), 120) → '2009-04-28' | 支援 style 日期格式代碼 (見下表) |
| CAST | CAST(expr AS data_type[(len)]) | CAST(123 AS nvarchar) → '123' | ANSI 標準,不支援 style |
| 不含世紀 (yy) | 含世紀 (yyyy) | 標準 | 輸出範例 |
|---|---|---|---|
| 0/100 | - | 預設 | mon dd yyyy hh:miAM |
| 1 | 101 | 美國 | mm/dd/yyyy |
| 2 | 102 | ANSI | yy.mm.dd |
| 3 | 103 | 英/法 | dd/mm/yy |
| 4 | 104 | 德國 | dd.mm.yy |
| 5 | 105 | 意大利 | dd-mm-yy |
| - | 120 | ODBC | yyyy-mm-dd hh:mi:ss(24h) |
運算子兩側型別不同時,低優先級隱含轉換為高優先級。若不支援隱含轉換則報錯。需顯式轉換時用 CAST/CONVERT。
優先級由高到低 (26 層):
中文輸出需在字串前加 N 前綴 (如 N'中文') 以正確處理 Unicode。
本手冊涵蓋 SQL Server 2005 核心函數 90% 以上日常使用場景,建議收藏備查。