SQL 使用函數一些簡單的事例

 ============簡單介紹常用的===========

select ByeTime,case when len(ByeTime)>0 then str(DATEDIFF(day,ComeInTime,ByeTime))+'(已離職)'
else str(DATEDIFF(day,ComeInTime,getdate())) end as test
from myUser where DelFlag='0' and UserID='cq'  --case when 使用

--cast(字段 as  decimal(18,2)) 取兩位小數
--round(b.OrderedItems*1.00/a.AllItems,2) 取兩位小數
--SELECT SUBSTRING(title, 1, 25) AS Title, CAST(ytd_sales AS char(2))FROM titles 截取字符串

--where datediff(day,BackDate,getdate)>2   2爲距離今天相差的天數
-- 在SQL語句後面加 order by  newid() desc  查詢結果每次是隨即的
--select top 10 isnull(字段,$10) from 表  --如果字段是 NULL的話,值將會被替換
--SELECT IDENTITY(int, 1,1) AS rowid ,testtable.* INTO 臨時表名 FROM testtable


=============詳細介紹========

字符串函數對二進制數據、字符串和表達式執行不同的運算。此類函數作用於CHAR、VARCHAR、 BINARY、 和VARBINARY 數據類型以及可以隱式轉換爲CHAR 或VARCHAR的數據類型。可以在SELECT 語句的SELECT 和WHERE 子句以及表達式中使用字符串函數。常用的字符串函數有:

  1、字符轉換函數

  有以下幾種字符轉換函數:

  ·ASCII()

  ASCII() 函數返回字符表達式最左端字符的ASCII 碼值。ASCII() 函數語法如下:

  

  例4-40:

  

  

  提醒:在ASCII()函數中,純數字的字符串可不用‘’括起來,但含其它字符的字符串必須用‘’括起來使用,否則會出錯。

  ·CHAR()

  CHAR() 函數用於將ASCII 碼轉換爲字符。其語法如下:

  

  如果沒有輸入0 ~ 255 之間的ASCII 碼值,CHAR() 函數會返回一個NULL 值。

  例4-41:

  

  ·LOWER()

  LOWER() 函數把字符串全部轉換爲小寫,其語法如下:

  

  例4-42:

  

  ·UPPER()

  UPPER() 函數把字符串全部轉換爲大寫,其語法如下:

  

  例4-43:

  

  ·STR()

  STR() 函數把數值型數據轉換爲字符型數據,其語法如下:

  STR (<float _expression>[,length[, <decimal>]])

  自變量length 和decimal 必須是非負值,length 指定返回的字符串的長度,decimal 指定返回的小數位數。如果沒有指定長度,缺省的length 值爲10, decimal 缺省值爲0。 小數位數大於decimal 值時,STR() 函數將其下一位四捨五入。指定長度應大於或等於數字的符號位數+小數點前的位數+小數點位數+小數點後的位數。如果<float _expression>小數點前的位數超過了指定的長度,則返回指定長度的“*”。
 例4-44:

  

  2、去空格函數

  去空格函數有如下兩種:

  ·LTRIM()

  LTRIM() 函數把字符串頭部的空格去掉,其語法如下:

  LTRIM (<character _expression>)

  例4-45:

  

  ·RTRIM()

  RTRIM() 函數把字符串尾部的空格去掉,其語法如下:

  RTRIM (<character _expression>)

  例4-46:

  

  提示:在許多情況下,往往需要得到頭部和尾部都沒有空格字符的字符串,這時可將上兩個函數嵌套使用。

  例4-47:

  

  3、取子串函數

  取子串函數如下所示:

  ·LEFT()

  LEFT() 函數返回部分字符串,其語法如下:

  LEFT (<character_expression>, <integer_expression>)

  LEFT() 函數返回的子串是從字符串最左邊起到第integer_expression 個字符的部分。若integer_expression 爲負值,則返回NULL 值。

  例4-48:

  

  ·RIGHT()

  RIGHT() 函數返回部分字符串,其語法如下:

  RIGHT (<character_expression>, <integer_expression>)

  RIGHT() 函數返回的子串是從字符串右邊第integer_expression 個字符起到最後一個字符的部分。若integer_expression 爲負值,則返回NULL 值。

  例4-49:

  

  ·SUBSTRING()

  SUBSTRING() 函數返回部分字符串,其語法如下:

  SUBSTRING (<expression>, <starting_ position>, length)

  SUBSTRING() 函數返回的子串是從字符串左邊第starting_ position 個字符起length個字符的部分。其中表達式可以是字符串或二進制串或含字段名的表達式。SUBSTRING()函數不能用於TEXT 和IMAGE 數據類型。

  例4-50:

  

  4、字符串比較函數

  字符串比較函數如下所示:

  ·CHARINDEX()

  CHARINDEX() 函數返回字符串中某個指定的子串出現的開始位置,其語法如下:

  CHARINDEX (<’substring_expression’>, <expression>)

  其中substring _expression 是所要查找的字符表達式,expression 可爲字符串也可爲列名錶達式。如果沒有發現子串,則返回0 值。此函數不能用於TEXT 和IMAGE 數據類型。

  例4-51:

  

  例4-52:

  

  ·PATINDEX()

  PATINDEX() 函數返回字符串中某個指定的子串出現的開始位置,其語法如下:

  PATINDEX (<’%substring _expression%’>, <column_ name>)

  其中子串表達式前後必須有百分號“%”否則返回值爲0。

  例4-53:

  

  與CHARINDEX() 函數不同的是,PATINDEX() 函數的子串中可以使用通配符,且此函數可用於CHAR、 VARCHAR 和TEXT 數據類型。

  例4-54:

  

  ·SOUNDEX()

  SOUNDEX() 函數返回一個四位字符碼,其語法如下:

  SOUNDEX (<character _expression>)

  SOUNDEX() 函數將character _expression 轉換爲4 個字符的聲音碼。其中第一個碼爲原字符串的第一個字符,第二到第四個字符則爲數字,是該字符串的聲音字母所對應的數字,但是忽略了除首字母外的串中的所有元音字母 。SOUNDEX() 函數可用來查找聲音相似的字符串。但SOUNDEX 函數對數字和漢字均只返回0 值。

  例4-55:

  

  ·DIFFERENCE()

  DIFFERENCE() 函數返回由SOUNDEX() 函數返回的兩個字符表達式的值的差異。其語法如下:

  DIFFERENCE (<character_expression1>, <character_expression2>)

  值的差異是用0、 1、 2、 3、 4 來表示的,含義如下:

  0--兩個SOUNDEX() 函數返回值的第一個字符不同

  1--兩個SOUNDEX() 函數返回值的第一個字符相同

  2--兩個SOUNDEX() 函數返回值的第一、二個字符相同

  3--兩個SOUNDEX() 函數返回值的第一、二、三個字符相同

  4--兩個SOUNDEX() 函數返回值完全相同

  例4-56:

  

  5、字符串操作函數

  字符串操作函數如下所示:

  ·QUOTENAME()

  QUOTENAME() 函數返回被特定字符括起來的字符串,其語法如下:

  QUOTENAME (<’character_expression’>[, quote_ character])

  其中quote_ character 標明括字符串所用的字符,如“‘”、“(”、“[” 等,缺省值爲“[]”

  例4-57:

  

  ·REPLICATE()

  REPLICATE() 函數返回一個重複character_expression 指定次數的字符串,其語法如下:

  REPLICATE (character_expression integer_expression)

  如果integer_expression 值爲負值,則REPLICATE() 函數返回NULL 串。

  例4-58:

  

  ·REVERSE()

  REVERSE() 函數將指定的字符串的字符排列順序顛倒,其語法如下:

  REVERSE (<character_expression>)

  其中character_expression 可以是字符串、常數或一個列的值。

  例4-59:

  

  ·REPLACE()

  REPLACE() 函數返回被替換了指定子串的字符串,其語法如下:

  REPLACE (<string_expression1>, <string_expression2>, <string_expression3>)

  REPLACE() 函數用string_expression3 替換在string_expression1 中的子串string_expression2。

  例4-60:

  

  ·SPACE()

  SPACE() 函數返回一個有指定長度的空白字符串,其語法如下:

  SPACE (<integer_expression>)

  如果integer_expression 值爲負值,則SPACE() 函數返回NULL 串。

  例4-61:

  

  ·STUFF()

  STUF()函數用另一子串替換字符串指定位置、長度的子串,其語法如下:

  STUFF (<character_expression1>, <start_ position>, <length>,<character_expression2>)

  如果起始位置爲負或長度值爲負,或者起始位置大於character_expression1 的長度,則STUFF() 函數返回NULL 值。如果length 長度大於character_expression1 的長度,則character_expression1 只保留首字符。

  例4-62:

  

  6、數據類型轉換函數

  在一般情況下,SQL Server 會自動完成數據類型的轉換,例如,可以直接將字符數據類型或表達式與DATATIME 數據類型或表達式比較當表達式中用了INTEGER、 SMALLINT或TINYINT 時,SQL Server 也可將INTEGER 數據類型或表達式轉換爲SMALLINT數據類型或表達式,這稱爲隱式轉換。如果不能確定SQL Server 是否能完成隱式轉換或者使用了不能隱式轉換的其它數據類型,就需要使用數據類型轉換函數做顯式轉換了。此類函數有兩個:

  ·CAST()

  CAST() 函數語法如下:

  CAST (<expression> AS <data_ type>[ length ])

  ·CONVERT()

  CONVERT() 函數語法如下:

  CONVERT (<data_ type>[ length ], <expression> [, style])

  提醒: 1、data_type爲SQL Server系統定義的數據類型,用戶自定義的數據類型不能在此使用。

  2、length用於指定數據的長度,缺省值爲30。

  3、把CHAR或VARCHAR類型轉換爲諸如INT或SAMLLINT這樣的INTEGER類型、結果必須是帶正號(+)或負號(-)的數值。

  4、TEXT類型到CHAR或VARCHAR類型轉換最多爲8000個字符,即CHAR或VARCHAR數據類型是最大長度。

  5、IMAGE類型存儲的數據轉換到BINARY或VARBINARY類型,最多爲8000個字符。

  6、把整數值轉換爲MONEY或SMALLMONEY類型,按定義的國家的貨幣單位來處理,如人民幣、美元、英鎊等。

  7、BIT類型的轉換把非零值轉換爲1,並仍以BIT類型存儲。

  8、試圖轉換到不同長度的數據類型,會截短轉換值並在轉換值後顯示“+”,以標識發生了這種截斷。

  例4-63:

  

  例4-64:

  

  例4-65:

  

  

  用CONVERT() 函數的style 選項能以不同的格式顯示日期和時間。style 是將DATATIME 和SMALLDATETIME 數據轉換爲字符串時所選用的由SQL Server 系統提供的轉換樣式編號,不同的樣式編號有不同的輸出格式。如表4-8 所示。

  

  例4-66:

  

  7、日期函數

  日期函數用來操作DATETIME 和SMALLDATETIME 類型的數據,執行算術運算。與其它函數一樣,可以在SELECT 語句的SELECT 和WHERE 子句以及表達式中使用日期函數。其使用方法如下:

  日期函數參數,其中參數個數應不同的函數而不同。

  ·DAY()

  DAY() 函數語法如下:

  DAY (<date_expression>)

  DAY() 函數返回date_expression 中的日期值。

  例4-67:

  

  在上例中,DAY() 函數使用整數值作參數,系統從1900 年1 月1 日起往後數指定整數值+1, 天再返回其日期。

  ·MONTH()

  MONTH() 函數語法如下:

  MONTH (<date_expression>)

  MONTH() 函數返回date_expression 中的月份值。

  例4-68:

  

  與DAY() 函數不同的是,MONTH() 函數的參數爲整數時,一律返回整數值1,即SQL Server 認爲其是1900 年1 月。

  例4-69:

  

  ·YEAR()

  YEAR() 函數語法如下:

  YEAR (<date_expression>)

  YEAR() 函數返回date_expression 中的年份值。

  例4-70:

  

  提醒:在使用日期函數時,其日期值應在1753年到9999年之間,這是SQL Server系統所能識別的日期範圍,否則會出現錯誤。

  例4-71:

  

  ·DATEADD()

  DATEADD() 函數語法如下:

  DATEADD (<datepart>, <number>, <date>)

  DATEADD() 函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期。參數“datepart” 在日期函數中經常被使用,它用來指定構成日期類型數據的各組件,如年、季、月、日、星期等。其取值如表4-9 所示:

  

  例4-72:

  

  

  ·DATEDIFF()

  DATEDIFF() 函數語法如下:

  DATEDIFF() (<datepart>, <date1>, <date2>)

  DATEDIFF() 函數返回兩個指定日期在datepart 方面的不同之處,即date2 超過date1的差距值,其結果值是一個帶有正負號的整數值。針對不同的datepart, DATEDIFF()函數所允許的最大差距值不一樣,如:datepart 爲second 時,DATEDIFF() 函數所允許的最大差距值爲68: 年datepart 爲millisecond 時,DATEDIFF() 函數所允許的最大差距值爲24 天20 小時30 分23 秒647 毫秒。

  例4-73: 查詢在本單位工作了8 年以上的員工的姓名和所在的部門,結果按在本單位工作的時間長短排序。

  

  ·DATENAME()

  DATENAME() 函數語法如下:

  DATENAME (<datepart>, <date)>

  DATENAME() 函數以字符串的形式返回日期的指定部分此部分。由datepart 來指定。

  例4-74: 查詢工資大於等於7000 的員工的姓名、部門編號、工資和進入單位的年份,結果按工資高低降序排列。

  

  ·DATEPART()

  DATEPART() 函數語法如下:

  DATEPART (<datepart>, <date>)

  DATEPART() 函數以整數值的形式返回日期的指定部分。此部分由datepart 來指定。

  DATEPART (dd, date) 等同於DAY (date)

  DATEPART (mm, date) 等同於MONTH (date)

  DATEPART (yy, date) 等同於YEAR (date)

  例4-75:

  

  ·GETDATE()

  GETDATE() 函數語法如下:

  GETDATE()

  GETDATE() 函數以DATETIME 的缺省格式返回系統當前的日期和時間,它常作爲其它函數或命令的參數使用。

  例4-71:

  

  8、系統函數

  系統函數用於獲取有關計算機系統、用戶、數據庫和數據庫對象的信息。系統函數可以讓用戶在得到信息後,使用條件語句,根據返回的信息進行不同的操作。與其它函數一樣,可以在SELECT 語句的SELECT 和WHERE 子句以及表達式中使用系統函數。

  ·APP_NAME()

  APP_NAME() 函數語法如下:

  APP_NAME()

  APP_NAME() 函數返回當前執行的應用程序的名稱。其返回值類型爲nvarchar (128)。

  例4-77: 測試當前應用程序是否爲SQL Server Query Analyzer

  

  ·COALESCE()

  COALESCE() 函數語法如下:

  COALESCE (<expression> [, ...n])

  COALESCE() 函數返回衆多表達式中第一個非NULL 表達式的值。如果所有的表達式均爲NULL, 則COALESCE() 函數返回NULL 值。COALESCE() 函數等效於下面的CASE 語句:

  CASE

  WHEN (expression1 IS NOT NULL) THEN expression1

  …

  WHEN (expressionN IS NOT NULL) THEN expression

  ELSE NULL

  例4-78:

  

  ·COL_LENGTH()

  COL_LENGTH() 函數語法如下:

  COL_LENGTH (<'table_name'>, <'column_name'>)

  COL_LENGTH() 函數返回表中指定字段的長度值。其返回值爲INT 類型。

  例4-79:

  

  ·COL_NAME()

  COL_NAME() 函數語法如下:

  COL_NAME (<table_id>, <column_id>)

  COL_NAME() 函數返回表中指定字段的名稱,即列名。其返回值爲SYSNAME 類型。其中table_id 和column_id 都是INT 類型的數據,函數用table_id 和column_id 參數來生成列名字符串。關於如何獲得table_id 和column_id, 請參見OBJECT_ID() 函數。

  例4-80:

  

  

  ·DATALENGTH()

  DATALENGTH() 函數語法如下:

  DATALENGTH (<expression>)

  DATALENGTH() 函數返回數據表達式的數據的實際長度。其返回值類型爲INT。DATALENGTH() 函數對VARCHAR、 VARBINARY、 TEXT、 IMAGE、 NVARCHAR和NTEX 等能存儲變動長度數據的數據類型特別實用。NULL 的長度爲NULL。

  例4-81:

  

  · DB_ID()

  DB_ID() 函數語法如下:

  DB_ID (['database_name'])

  DB_ID() 函數返回數據庫的編號。其返回值爲SMALLINT 類型。如果沒有指定database_name, 則返回當前數據庫的編號。

  例4-82:

  

  

  ·DB_NAME()

  DB_NAME() 函數語法如下:

  DB_NAME (database_id)

  DB_NAME() 函數返回數據庫的名稱.其返回值類型爲NVARCHAR (128). database_id是SMALLINT 類型的數據.如果沒有指定database_id, 則返回當前數據庫的名稱.

  例4-83:

  

  · FORMATMESSAGE()

  FORMATMESSAGE() 函數語法如下:

  FORMATMESSAGE (<message_number>, <param_value>[, ...n])

  FORMATMESSAGE() 函數用於從系統信息表sysmessages 中挑選一條現存的信息,

  再將其格式轉換爲用戶需要的形式.其功能類似於RAISERROR 命令,不同的是RAISERROR命令立即打印出信息,而FORMATMESSAGE() 函數返回編輯過的信息給調用它的程序.其返回值類型爲NVARCHAR.

  其中message_number 是存儲在sysmessages 系統表中的信息ID 號.param_value 是在信息中使用的參數.最多可使用20 個參數.

  FORMATMESSAGE() 函數查找使用當前語言平臺語言的信息,如果沒有本地語言的信息,則使用U.S. English 版本語言的信息.

  例4-84: 假定有一個編號爲10001 的信息存儲在sysmessages 表中,此信息的內容爲"The Length of rows %column_name in %table_name is %column_num.".FORMATMESSAGE() 函數用值myColumn、 myTable 和20 分別替代上述參數值,將結果存儲在變量@test1 中.程序如下:

  declare @test1 varchar (100)

  select @test1 = formatmessage (10001, 'myColumn', 'myTable', 20)

  ·GETANSINULL()

  GETANSINULL() 函數語法如下:

  GETANSINULL() (['database_name'])

  GETANSINULL() 函數返回當前數據庫默認的NULL 值.其返回值類型爲INT.GETANSINULL() 函數對ANSI 空值NULL 返回1; 如果沒有定義ANSI 空值,則返回0.

  例4-85:

  select getansinull ('pangu')

  運行結果如下:

  ------

  1

  ·HOST_ID()

  HOST_ID() 函數語法如下:

  HOST_ID()

  HOST_ID() 函數返回服務器端計算機的名稱.其返回值類型爲NCHAR.

  例4-86:

  declare @hostID char (8)

  select @hostID = host_id()

  print @hostID

  運行結果如下:

  -606771

  ·HOST_NAME()

  HOST_NAME() 函數語法如下:

  HOST_NAME()

  HOST_NAME() 函數返回服務器端計算機的名稱.其返回值類型爲CHAR (8).

  例4-87:

  declare @hostNAME nchar (20)

  select @hostNAME = host_name()

  print @hostNAME

  運行結果如下:

  XUJIN

  ·IDENTITY()

  IDENTITY() 函數語法如下:

  IDENTITY (<data_type>[, seed, increment]) [AS column_name])

  IDENTITY() 函數只在SELECT...INTO 語句中使用,用於插入一個identity column列到新表中.其返回值類型與data_type 的類型相同.

  其中:

  data_type 指定數據類型.data type 是INTEGER 或DECIMAL 類的數據類型.Seed指定identity column 的初值,即第一個值.Increment 指定增加一個記錄時,記錄的identity column 值應在前記錄的基礎上增加的值.seed 和increment 的缺省值爲1.column_name 是所插入的identity column 的列名.雖然AS column_name 爲可選項,但由於函數在表中插入了一個新列,所以必須指定列名.如果不使用AS column_name 選項,可以使用以下兩種方式來指定列名:

  (1) select identity (int, 1, 1) as column_name

  into newtable

  from oldtable

  (2) select column_name = identity (int, 1, 1)

  into newtable

  from oldtable

  有關identity column 的信息,請參見"管理數據庫表"中的"列屬性"章節.

  ·IDENT_INCR()

  IDENT_INCR() 函數語法如下:

  IDENT_INCR ('table_or_view')

  IDENT_INCR() 函數返回表中標識性字段identity column 的增量.若無此字段,則返回NULL 值.其返回值類型爲NUMERIC.

  例4-88:

  

  ·IDENT_SEED()

  IDENT_SEED() 函數語法如下:

  IDENT_SEED (<'table_or_view'>)

  IDENT_SEED() 函數返回表中標識性字段identity column 的初值.若無此字段,則返回NULL 值.其返回值類型爲NUMERIC.

  例4-89:

  

  ·INDEX_COL()

  INDEX_COL() 函數語法如下:

  INDEX_COL (<'table_name'>, <index_id>, <key_id>)

  INDEX_COL() 函數返回表內索引識別碼爲index_id 的索引的名稱,並找出組成該索引的列組合中第key_id 個列名.其返回值類型爲NCHAR.

  例4-90:

  

  

  ·ISDATE()

  ISDATE() 函數語法如下:

  ISDATE (<expression>)

  ISDATE() 函數判斷所給定的表達式是否爲合理日期,如果是則返回1, 不是則返回0.

  例4-91:

  

  

  ·ISNULL()

  ISNULL() 函數語法如下:

  ISNULL (<check_expression>, <replacement_value>)

  ISNULL() 函數將表達式中的NULL 值用指定值替換.如果check_expresssion 不是NULL, 則返回其原來的值,否則,返回replacement_value 的值.

  提醒:reaplacement_value的數據類型應與chech_expresssion一致.

  例4-92:

  

  ·ISNUMERIC()

  ISNUMERIC() 函數語法如下:

  ISNUMERIC (<expression>)

  ISNUMERIC() 函數判斷所給定的表達式是否爲合理的數值(INTEGER、 FLOATING POINT NUMBER、 MONEY 或DECIMAL 類型),如果是則返回1, 不是則返回0.

  提醒:檢查MONEY型數據時,應先用CONVERT()函數將其轉換爲數值型或字符型。

  例4-93:

  

  

  ·NEWID

  NEWID() 函數語法如下:

  NEWID()

  NEWID() 函數返回一個UNIQUEIDENTIFIER 類型的數值.此函數使用計算機的網卡的Ethernet 地址加上經由CPU Clock 產生的數字而得到其返回值.由於網卡的Ethernet地址是全球惟一的(在未來近一百年內不會生產出相同Ethernet 地址的網卡),因而函數所產生的數字也是惟一的.

  例4-94:

  

  ·NULLIF()

  NULLIF() 函數語法如下:

  NULLIF (<expression1>, <expression2>)

  NULLIF() 函數在expression1 與expression2 相等時返回NULL 值,若不相等時則返回expression1 的值.其返回值類型與expression1 相同.expression1 與expression2 應爲同類的數據類型.

  例4-95:

  

  ·OBJECT_ID()

  OBJECT_ID() 函數語法如下:

  OBJECT_ID (<'object_name'>)

  OBJECT_ID() 函數返回數據庫對象的編號.其返回值類型爲INT.

  例4-96:

  

  提醒:當指定一個臨時表的表名時,其表名的前面必須加上臨時數據庫名"tempdb",如:select object_id("tempdb..#mytemptable").

  ·OBJECT_NAME()

  OBJECT_NAME() 函數語法如下:

  OBJECT_NAME (<object_id>)

  OBJECT_NAME() 函數返回數據庫對象的名稱.其返回值類型爲NCHAR.

  例4-97:

  

  ·PARSENAME()

  PARSENAME() 函數語法如下:

  PARSENAME (<'object_name '>, <object_piece>)

  PARSENAME() 函數返回一個數據庫對象完整名稱中的特定部分(對象名稱或數據庫擁有者名稱或數據庫名稱或服務器名稱).其返回值類型爲NCHAR.

  其中object_piece 爲INT 類型,其取值如下:

  對象名稱Object name;

  數據庫擁有者名稱Owner name;

  數據庫名稱Database name;

  服務器名稱Server name.

  如果object_name 或object_piece 爲NULL, 則返回NULL 值.

  例4-98:

  

  ·PERMISSIONS()

  PERMISSIONS() 函數語法如下:

  PERMISSIONS ([object_id [, 'column_name']])

  PERMISSIONS() 函數用於獲取當前用戶對某一對象的存取權限或對某一命令的執行權限.其返回值爲一個32 位的bitmap 值,其中低16 位表示目前用戶對象的存取權限設定值.高16 位表示用戶是否可以開放此對象的權限給其它人.

  如果不指定object_id, 則函數返回目前用戶的命令執行權限的bitmap 值.使用column_name 選項可以得到表的列權限.各權限值見表4-10 至4-12.

  

  有關PERMISSIONS() 函數使用方法,我們將在以後的章節分別講述.

  ·STATS_DATE()

  STATS_DATE() 函數語法如下:

  STATS_DATE (<table_id>, <index_id>)

  STATS_DATE() 函數返回最新的索引統計日期.其返回值類型爲DATETIME.

  例4-99:

  

  ·SUSER_SID()

  SUSER_ SID() 函數語法如下:

  SUSER_SID (['login_name'])

  SUSER_SID() 函數根據用戶登錄名返回用戶的SID (Security Identification Number,安全帳戶名)號.其返回值類型爲INT. 如果不指定login_name, 則返回當前用戶的SID號.

  例4-100:

  

  ·SUSER_SNAME()

  SUSER_SNAME() 函數語法如下:

  SUSER_SNAME ([server_user_sid])

  SUSER_SNAME() 函數根據SID 號返回用戶的登錄名.如果沒有指定server_user_sid,則返回當前用戶的登錄名.其返回值類型爲NCHAR.

  例4-101:

  

  ·USER_ID()

  USER_ID() 函數語法如下:

  USER_ID (['user_name'])

  USER_ID() 函數根據用戶數據庫的用戶名返回用戶的數據庫ID 號.其返回值類型爲INT. 如果沒有指定user_name, 則返回當前用戶的數據庫ID 號.

  例4-102:

  

  ·USER_NAME()

  USER_NAME() 函數語法如下:

  USER_NAME ([user_id])

  USER_NAME() 函數根據用戶的數據庫ID 號返回用戶的數據庫用戶名.其返回值類型爲NCHAR. 如果沒有指定user_id, 則返回當前數據庫的用戶名.

  例4-103:

  

  9、TEXT 和IMAGE 函數

  ·TEXTPTR()

  TEXTPTR() 函數語法如下:

  TEXTPTR (<column>)

  TEXTPTR() 函數返回一個指向存儲文本的第一個數據庫頁的指針.其返回值是一個VARBINARY (16) 類型的二進制字符串.如果數據類型爲TEXT、 NTEXT 或IMAGE的列沒有賦予初值,則TEXTPTR() 函數返回一個NULL 指針.

  例4-104:

  

  ·TEXTVALID()

  TEXTVALID() 函數語法如下:

  TEXTVALID (<'table.column'>, <text_ pointer>)

  TEXTVALID() 函數用於檢查指定的文本指針是否有效.如果有效,則返回1; 無效,則返回0. 如果列未賦予初值,則返回NULL 值.

  例4-105:

  

  

  10、NILADIC 函數

  NILADIC 函數返回一個用戶或時間戳值.這類函數均不帶參數.NILADIC 函數經常被定義爲CREATE 或ALERT TABLE 語句中DEFAULT 約束的一部分,可參見"管理數據庫表"章節.主要的NILADIC 函數如下:

  ·CURRENT_TIMESTAMP

  CURRENT_TIMESTAMP 函數語法如下:

  CURRENT_TIMESTAMP

  CURRENT_TIMESTAMP 函數返回當前的日期和時間,等同於GETDATE() 函數.返回值類型爲DATETIME.

  例4-106:

  

  ·CURRENT_USER

  CURRENT_USER 函數語法如下:

  CURRENT_USER

  CURRENT_USER 函數與USER_NAME() 函數功能相同,返回當前用戶的數據庫用戶名.返回值類型爲SYSNAME.

  例4-107:

  

  ·SESSION_USER

  SESSION_USER 函數語法如下:

  SESSION_USER

  SESSION_USER 函數等同於USER_NAME() 函數,返回當前用戶的數據庫用戶名.返回值類型爲NCHAR.

  ·SYSTEM_USER

  SYSTEM_USER 函數語法如下:

  SYSTEM_USER

  SYSTEM_USER 返回當前系統的用戶名.如果用戶是以Windows NT 認證方式登錄SQL Server 的,則會返回Windows NT 的登錄名;如果用戶是以SQL Server 認證方式登錄的,則返回SQL Server 中的用戶名.

  例4-108:

  

  ·USER

  USER 函數語法如下:

  USER

  USER 與系統函數USER_NAME() 的功能相同,返回當前用戶的數據庫用戶名.返回值類型爲CHAR.

  例4-109:

  

  11、用戶自定義函數

  從SQL Server 2000 開始,用戶可以自定義函數了.在SQL Server 2000 中用戶自定義函數是作爲一個數據庫對象來管理的,可以使用企業管理器(Enterprise Manager) 或Transact-SQL 命令來創建、修改、刪除.其具體方法請參見第13 章"遊標、視圖和自定義函數".

  本章介紹了Transact-SQL 語言的基本概念,及其使用方法.Transact-SQL 語言需要大量的實踐,才能熟練運用.本章及以後的SQL 語法基本上都是標準的ANSI SQL 兼容語法,在其它數據庫中,如ORACLE、 SYBASE、 INFORMIX、 FOXPRO 等,大部分語句均可套用.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章