1) CASE
CASE有兩種使用形式:一種是簡單的CASE函式,另一種是搜尋型的CASE函式。
[1]簡單的 CASE 函式
Format:
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[ ELSE else_result_expression ]
END
Attention: 引數input_expression和when_expression的資料型別必須相同,或者可隱形轉換。
eg1:
[2]CASE 搜尋函式:
Function: 按指定的順序為每個WHEN子句的Boolean_expression表示式求值,返回第一個取值為TRUE的Boolean_expression表示式所對應的result_expression表示式之值;如果沒有取值為TRUE Boolean_expression表示式,則當指定else子句時,返回else_result_expression之值,若沒有指定else子句時,則返回null.
Format:
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[ ELSE else_result_expression]
END
eg1:
2) CAST 和 CONVERT
常用的型別轉換有以下幾種情況:
日期型->字元型:如將 datetime 或 smalldatetime 資料轉換為字元資料(nchar、nvarchar、char、varchar、nchar 或 nvarchar 資料型別)。
字元型->日期型:如將字元資料(nchar、nvarchar、char、varchar、nchar 或 nvarchar 資料型別)轉換為datetime 或 smalldatetime 資料。
數值型->字元型:如將 float、real、money 或 smallmoney 資料轉換為字元資料(nchar、nvarchar、char、varchar、nchar 或 nvarchar 資料型別)。
Format:
CAST ( expression AS data_type )
CONVERT (data_type[(length)], expression [style])
Attention: data_type不能為使用者定義的資料型別。Style的常用取值及其作用如下表所示:
日期型與字元型轉換時style的常用取值及其作用
Style取值 不帶世紀數位 |
Style取值 帶世紀數位 |
標準 |
輸入/輸出 |
|
0 或 100 |
預設值 |
mon dd yyyy hh:miAM (或 PM) |
1 |
101 |
美國 |
mm/dd/yyyy |
2 |
102 |
ANSI |
yy.mm.dd |
|
9 或 109 |
預設值 + 毫秒 |
mon dd yyyy hh:mi:ss:mmmAM(或 PM) |
10 |
110 |
美國 |
mm-dd-yy |
12 |
112 |
ISO |
yymmdd |
eg:
float 或 real轉換為字元資料時style的取值
style值 |
輸出 |
0(預設值) |
根據需要使用科學記數法,長度最多為 6。 |
1 |
使用科學記數法,長度為8。 |
2 |
使用科學記數法,長度為16。 |
eg:
從 money 或 smallmoney轉換為字元資料時style的取值
值 |
輸出 |
0(預設值) |
小數點左側每三位數字之間不以逗號分隔,小數點右側取兩位數,例如 4236.98。 |
1 |
小數點左側每三位數字之間以逗號分隔,小數點右側取兩位數,例如 3,610.92。 |
2 |
小數點左側每三位數字之間不以逗號分隔,小數點右側取四位數,例如 4236.9819。 |
eg:
eg:如下程式將檢索總學分40~49分的學生姓名,並將總學分轉換為 char(20)。
如下例子分別使用 CAST 和 CONVERT
3) COALESCE
Function:返回參數列達式中第一個非空表示式的值,如果所有自變數均為null,則COALESCE 返回null。
Format:COALESCE ( expression[ ...n ] )
eg1:
eg2:
6) 日期時間函式
日期函式可用在 SELECT 語句的選擇列表或用在查詢的 WHERE 子句中,在此介紹一下GETDATE ( )函式。
Function:返回當前的日期和時間。返回值型別:datetime
Format:GETDATE ( )
eg:
7)遊標函式
遊標函式用於返回有關遊標的資訊。主要有如下游標函式:
Function:返回最後開啟的遊標中當前存在的滿足條件的行數。返回值型別為:integer
Format:@@CURSOR_ROWS
eg:
如下的示例宣告瞭一個遊標,並用 SELECT 顯示 @@CURSOR_ROWS 的值。
[2]CURSOR_STATUS
Function:返回遊標狀態值,是開啟還是關閉
Format:
CURSOR_STATUS
( { 'local' , 'cursor_name' } /*指明資料來源為本地遊標*/
| { 'global' , 'cursor_name' } /*指明資料來源為全域性遊標*/
| { 'variable' , 'cursor_variable' } /*指明資料來源為遊標變數*/
)
CURSOR_STATUS()函式返回值如下表所示:
返回值 |
遊標名或遊標變數 |
1 |
遊標的結果集至少有一行。 |
0 |
遊標的結果集為空。* |
-1 |
遊標被關閉。 |
-2 |
遊標不可用。 |
-3 |
指定的遊標不存在。 |
eg:
1 SELECT @@CURSOR_ROWS as a 2 DECLARE student_cursor CURSOR FOR 3 SELECT Sname FROM XS 4 OPEN student_cursor 5 FETCH NEXT FROM student_cursor 6 SELECT @@CURSOR_ROWS as b 7 select CURSOR_STATUS('global','student_cursor') as c 8 CLOSE student_cursor 9 DEALLOCATE student_cursor 10 go
Result:
[3]@@FETCH_STATUS
Format:@@FETCH_STATUS
Function:返回 FETCH 語句執行後遊標的狀態。返回值型別:integer,@@FETCH_STATUS返回值如下表所示。
返回值 |
說明 |
0 |
FETCH 語句執行成功。 |
-1 |
FETCH 語句執行失敗。 |
-2 |
被讀取的記錄不存在。 |
eg:
1 1 /*用 @@FETCH_STATUS 控制在一個 WHILE 迴圈中的遊標活動。*/ 2 2 use XSCJ 3 3 declare @name char(10),@st_id char(6) 4 4 declare student_cursor CURSOR 5 5 for select Sname,Sno from XSCJ.dbo.XS 6 6 open student_cursor 7 7 FETCH NEXT FROM student_cursor into @name,@st_id 8 8 select @name,@st_id 9 9 while @@FETCH_STATUS = 0 10 10 begin 11 11 fetch next from student_cursor into @name,@st_id 12 12 select @name,@st_id 13 13 end 14 14 close student_cursor 15 15 deallocate student_cursor
Result:
[4]後設資料函式
後設資料是用於描述資料庫和資料庫物件的。後設資料函式用於返回有關資料庫和資料庫物件的資訊。
1) DB_ID
Format:DB_ID ( [ 'database_name' ] )
Function:系統建立資料庫時,自動為其建立一個標識號,函式DB_ID根據database_name指定的資料庫名,返回其資料庫標識號(ID),如果引數database_name不指定,則返回當前資料庫ID,返回值型別為smallint.
2) DB_NAME函式
Format:DB_NAME(database_id)
Function:返回其資料庫名字(name)。