SqlServer——系統函式

[0]發表於2014-09-26

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
View Code

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
View Code

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)。

相關文章