SQL Server 2000基礎(chǔ)教程——字符串函數(shù)(二)- -
8、系統(tǒng)函數(shù) 系統(tǒng)函數(shù)用于獲取有關(guān)計(jì)算機(jī)系統(tǒng)、用戶、數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)對(duì)象的信息。系統(tǒng)函數(shù)可以讓用戶在得到信息后,使用條件語(yǔ)句,根據(jù)返回的信息進(jìn)行不同的操作。與其它函數(shù)一樣,可以在SELECT 語(yǔ)句的SELECT 和WHERE 子句以及表達(dá)式中使用系統(tǒng)函數(shù)。
·APP_NAME() APP_NAME() 函數(shù)語(yǔ)法如下: APP_NAME() APP_NAME() 函數(shù)返回當(dāng)前執(zhí)行的應(yīng)用程序的名稱(chēng)。其返回值類(lèi)型為nvarchar (128)。
例4-77: 測(cè)試當(dāng)前應(yīng)用程序是否為SQL Server Query Analyzer
·COALESCE() COALESCE() 函數(shù)語(yǔ)法如下: COALESCE (<expression> [, ...n]) COALESCE() 函數(shù)返回眾多表達(dá)式中第一個(gè)非NULL 表達(dá)式的值。如果所有的表達(dá)式均為NULL, 則COALESCE() 函數(shù)返回NULL 值。COALESCE() 函數(shù)等效于下面的CASE 語(yǔ)句:
CASE WHEN (expression1 IS NOT NULL) THEN expression1 … WHEN (expressionN IS NOT NULL) THEN expression ELSE NULL
例4-78:
·COL_LENGTH() COL_LENGTH() 函數(shù)語(yǔ)法如下: COL_LENGTH (<‘table_name‘>, <‘column_name‘>) COL_LENGTH() 函數(shù)返回表中指定字段的長(zhǎng)度值。其返回值為INT 類(lèi)型。
例4-79:
·COL_NAME() COL_NAME() 函數(shù)語(yǔ)法如下: COL_NAME (<table_id>, <column_id>) COL_NAME() 函數(shù)返回表中指定字段的名稱(chēng),即列名。其返回值為SYSNAME 類(lèi)型。其中table_id 和column_id 都是INT 類(lèi)型的數(shù)據(jù),函數(shù)用table_id 和column_id 參數(shù)來(lái)生成列名字符串。關(guān)于如何獲得table_id 和column_id, 請(qǐng)參見(jiàn)OBJECT_ID() 函數(shù)。
例4-80:
·DATALENGTH() DATALENGTH() 函數(shù)語(yǔ)法如下: DATALENGTH (<expression>) DATALENGTH() 函數(shù)返回?cái)?shù)據(jù)表達(dá)式的數(shù)據(jù)的實(shí)際長(zhǎng)度。其返回值類(lèi)型為INT。DATALENGTH() 函數(shù)對(duì)VARCHAR、 VARBINARY、 TEXT、 IMAGE、 NVARCHAR和NTEX 等能存儲(chǔ)變動(dòng)長(zhǎng)度數(shù)據(jù)的數(shù)據(jù)類(lèi)型特別實(shí)用。NULL 的長(zhǎng)度為NULL。
例4-81:
· DB_ID() DB_ID() 函數(shù)語(yǔ)法如下: DB_ID ([‘database_name‘]) DB_ID() 函數(shù)返回?cái)?shù)據(jù)庫(kù)的編號(hào)。其返回值為SMALLINT 類(lèi)型。如果沒(méi)有指定database_name, 則返回當(dāng)前數(shù)據(jù)庫(kù)的編號(hào)。
例4-82:
·DB_NAME() DB_NAME() 函數(shù)語(yǔ)法如下: DB_NAME (database_id) DB_NAME() 函數(shù)返回?cái)?shù)據(jù)庫(kù)的名稱(chēng).其返回值類(lèi)型為NVARCHAR (128). database_id是SMALLINT 類(lèi)型的數(shù)據(jù).如果沒(méi)有指定database_id, 則返回當(dāng)前數(shù)據(jù)庫(kù)的名稱(chēng).
例4-83:
· FORMATMESSAGE() FORMATMESSAGE() 函數(shù)語(yǔ)法如下: FORMATMESSAGE (<message_number>, <param_value>[, ...n]) FORMATMESSAGE() 函數(shù)用于從系統(tǒng)信息表sysmessages 中挑選一條現(xiàn)存的信息, 再將其格式轉(zhuǎn)換為用戶需要的形式.其功能類(lèi)似于RAISERROR 命令,不同的是RAISERROR命令立即打印出信息,而FORMATMESSAGE() 函數(shù)返回編輯過(guò)的信息給調(diào)用它的程序.其返回值類(lèi)型為NVARCHAR. 其中message_number 是存儲(chǔ)在sysmessages 系統(tǒng)表中的信息ID 號(hào).param_value 是在信息中使用的參數(shù).最多可使用20 個(gè)參數(shù). FORMATMESSAGE() 函數(shù)查找使用當(dāng)前語(yǔ)言平臺(tái)語(yǔ)言的信息,如果沒(méi)有本地語(yǔ)言的信息,則使用U.S. English 版本語(yǔ)言的信息.
例4-84: 假定有一個(gè)編號(hào)為10001 的信息存儲(chǔ)在sysmessages 表中,此信息的內(nèi)容為"The Length of rows %column_name in %table_name is %column_num.".FORMATMESSAGE() 函數(shù)用值myColumn、 myTable 和20 分別替代上述參數(shù)值,將結(jié)果存儲(chǔ)在變量@test1 中.程序如下: declare @test1 varchar (100) select @test1 = formatmessage (10001, ‘myColumn‘, ‘myTable‘, 20)
·GETANSINULL() GETANSINULL() 函數(shù)語(yǔ)法如下: GETANSINULL() ([‘database_name‘]) GETANSINULL() 函數(shù)返回當(dāng)前數(shù)據(jù)庫(kù)默認(rèn)的NULL 值.其返回值類(lèi)型為INT.GETANSINULL() 函數(shù)對(duì)ANSI 空值NULL 返回1; 如果沒(méi)有定義ANSI 空值,則返回0.
例4-85: select getansinull (‘pangu‘) 運(yùn)行結(jié)果如下: ------ 1
·HOST_ID() HOST_ID() 函數(shù)語(yǔ)法如下: HOST_ID() HOST_ID() 函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱(chēng).其返回值類(lèi)型為NCHAR.
例4-86: declare @hostID char (8) select @hostID = host_id() print @hostID 運(yùn)行結(jié)果如下: -606771
·HOST_NAME() HOST_NAME() 函數(shù)語(yǔ)法如下: HOST_NAME() HOST_NAME() 函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱(chēng).其返回值類(lèi)型為CHAR (8).
例4-87: declare @hostNAME nchar (20) select @hostNAME = host_name() print @hostNAME
運(yùn)行結(jié)果如下: XUJIN
·IDENTITY() IDENTITY() 函數(shù)語(yǔ)法如下: IDENTITY (<data_type>[, seed, increment]) [AS column_name]) IDENTITY() 函數(shù)只在SELECT...INTO 語(yǔ)句中使用,用于插入一個(gè)identity column列到新表中.其返回值類(lèi)型與data_type 的類(lèi)型相同.
其中: data_type 指定數(shù)據(jù)類(lèi)型.data type 是INTEGER 或DECIMAL 類(lèi)的數(shù)據(jù)類(lèi)型.Seed指定identity column 的初值,即第一個(gè)值.Increment 指定增加一個(gè)記錄時(shí),記錄的identity column 值應(yīng)在前記錄的基礎(chǔ)上增加的值.seed 和increment 的缺省值為1.column_name 是所插入的identity column 的列名.雖然AS column_name 為可選項(xiàng),但由于函數(shù)在表中插入了一個(gè)新列,所以必須指定列名.如果不使用AS column_name 選項(xiàng),可以使用以下兩種方式來(lái)指定列名: (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 有關(guān)identity column 的信息,請(qǐng)參見(jiàn)"管理數(shù)據(jù)庫(kù)表"中的"列屬性"章節(jié).
·IDENT_INCR() IDENT_INCR() 函數(shù)語(yǔ)法如下: IDENT_INCR (‘table_or_view‘) IDENT_INCR() 函數(shù)返回表中標(biāo)識(shí)性字段identity column 的增量.若無(wú)此字段,則返回NULL 值.其返回值類(lèi)型為NUMERIC.
例4-88:
·IDENT_SEED() IDENT_SEED() 函數(shù)語(yǔ)法如下: IDENT_SEED (<‘table_or_view‘>) IDENT_SEED() 函數(shù)返回表中標(biāo)識(shí)性字段identity column 的初值.若無(wú)此字段,則返回NULL 值.其返回值類(lèi)型為NUMERIC.
例4-89:
·INDEX_COL() INDEX_COL() 函數(shù)語(yǔ)法如下: INDEX_COL (<‘table_name‘>, <index_id>, <key_id>) INDEX_COL() 函數(shù)返回表內(nèi)索引識(shí)別碼為index_id 的索引的名稱(chēng),并找出組成該索引的列組合中第key_id 個(gè)列名.其返回值類(lèi)型為NCHAR.
例4-90:
·ISDATE() ISDATE() 函數(shù)語(yǔ)法如下: ISDATE (<expression>) ISDATE() 函數(shù)判斷所給定的表達(dá)式是否為合理日期,如果是則返回1, 不是則返回0.
例4-91:
·ISNULL() ISNULL() 函數(shù)語(yǔ)法如下: ISNULL (<check_expression>, <replacement_value>) ISNULL() 函數(shù)將表達(dá)式中的NULL 值用指定值替換.如果check_expresssion 不是NULL, 則返回其原來(lái)的值,否則,返回replacement_value 的值.
提醒:reaplacement_value的數(shù)據(jù)類(lèi)型應(yīng)與chech_expresssion一致.
例4-92:
·ISNUMERIC() ISNUMERIC() 函數(shù)語(yǔ)法如下: ISNUMERIC (<expression>) ISNUMERIC() 函數(shù)判斷所給定的表達(dá)式是否為合理的數(shù)值(INTEGER、 FLOATING POINT NUMBER、 MONEY 或DECIMAL 類(lèi)型),如果是則返回1, 不是則返回0.
提醒:檢查MONEY型數(shù)據(jù)時(shí),應(yīng)先用CONVERT()函數(shù)將其轉(zhuǎn)換為數(shù)值型或字符型。
例4-93:
·NEWID NEWID() 函數(shù)語(yǔ)法如下: NEWID() NEWID() 函數(shù)返回一個(gè)UNIQUEIDENTIFIER 類(lèi)型的數(shù)值.此函數(shù)使用計(jì)算機(jī)的網(wǎng)卡的Ethernet 地址加上經(jīng)由CPU Clock 產(chǎn)生的數(shù)字而得到其返回值.由于網(wǎng)卡的Ethernet地址是全球惟一的(在未來(lái)近一百年內(nèi)不會(huì)生產(chǎn)出相同Ethernet 地址的網(wǎng)卡),因而函數(shù)所產(chǎn)生的數(shù)字也是惟一的.
例4-94:
·NULLIF() NULLIF() 函數(shù)語(yǔ)法如下: NULLIF (<expression1>, <expression2>) NULLIF() 函數(shù)在expression1 與expression2 相等時(shí)返回NULL 值,若不相等時(shí)則返回expression1 的值.其返回值類(lèi)型與expression1 相同.expression1 與expression2 應(yīng)為同類(lèi)的數(shù)據(jù)類(lèi)型.
例4-95:
·OBJECT_ID() OBJECT_ID() 函數(shù)語(yǔ)法如下: OBJECT_ID (<‘object_name‘>) OBJECT_ID() 函數(shù)返回?cái)?shù)據(jù)庫(kù)對(duì)象的編號(hào).其返回值類(lèi)型為INT.
例4-96:
提醒:當(dāng)指定一個(gè)臨時(shí)表的表名時(shí),其表名的前面必須加上臨時(shí)數(shù)據(jù)庫(kù)名"tempdb",如:select object_id("tempdb..#mytemptable").
·OBJECT_NAME() OBJECT_NAME() 函數(shù)語(yǔ)法如下: OBJECT_NAME (<object_id>) OBJECT_NAME() 函數(shù)返回?cái)?shù)據(jù)庫(kù)對(duì)象的名稱(chēng).其返回值類(lèi)型為NCHAR.
例4-97:
·PARSENAME() PARSENAME() 函數(shù)語(yǔ)法如下: PARSENAME (<‘object_name ‘>, <object_piece>) PARSENAME() 函數(shù)返回一個(gè)數(shù)據(jù)庫(kù)對(duì)象完整名稱(chēng)中的特定部分(對(duì)象名稱(chēng)或數(shù)據(jù)庫(kù)擁有者名稱(chēng)或數(shù)據(jù)庫(kù)名稱(chēng)或服務(wù)器名稱(chēng)).其返回值類(lèi)型為NCHAR. 其中object_piece 為INT 類(lèi)型,其取值如下: 對(duì)象名稱(chēng)Object name; 數(shù)據(jù)庫(kù)擁有者名稱(chēng)Owner name; 數(shù)據(jù)庫(kù)名稱(chēng)Database name; 服務(wù)器名稱(chēng)Server name. 如果object_name 或object_piece 為NULL, 則返回NULL 值.
例4-98:
·PERMISSIONS() PERMISSIONS() 函數(shù)語(yǔ)法如下: PERMISSIONS ([object_id [, ‘column_name‘]]) PERMISSIONS() 函數(shù)用于獲取當(dāng)前用戶對(duì)某一對(duì)象的存取權(quán)限或?qū)δ骋幻畹膱?zhí)行權(quán)限.其返回值為一個(gè)32 位的bitmap 值,其中低16 位表示目前用戶對(duì)象的存取權(quán)限設(shè)定值.高16 位表示用戶是否可以開(kāi)放此對(duì)象的權(quán)限給其它人. 如果不指定object_id, 則函數(shù)返回目前用戶的命令執(zhí)行權(quán)限的bitmap 值.使用column_name 選項(xiàng)可以得到表的列權(quán)限.各權(quán)限值見(jiàn)表4-10 至4-12.
有關(guān)PERMISSIONS() 函數(shù)使用方法,我們將在以后的章節(jié)分別講述.
·STATS_DATE() STATS_DATE() 函數(shù)語(yǔ)法如下: STATS_DATE (<table_id>, <index_id>) STATS_DATE() 函數(shù)返回最新的索引統(tǒng)計(jì)日期.其返回值類(lèi)型為DATETIME.
例4-99:
·SUSER_SID() SUSER_ SID() 函數(shù)語(yǔ)法如下: SUSER_SID ([‘login_name‘]) SUSER_SID() 函數(shù)根據(jù)用戶登錄名返回用戶的SID (Security Identification Number,安全帳戶名)號(hào).其返回值類(lèi)型為INT. 如果不指定login_name, 則返回當(dāng)前用戶的SID號(hào).
例4-100:
·SUSER_SNAME() SUSER_SNAME() 函數(shù)語(yǔ)法如下: SUSER_SNAME ([server_user_sid]) SUSER_SNAME() 函數(shù)根據(jù)SID 號(hào)返回用戶的登錄名.如果沒(méi)有指定server_user_sid,則返回當(dāng)前用戶的登錄名.其返回值類(lèi)型為NCHAR.
例4-101:
·USER_ID() USER_ID() 函數(shù)語(yǔ)法如下: USER_ID ([‘user_name‘]) USER_ID() 函數(shù)根據(jù)用戶數(shù)據(jù)庫(kù)的用戶名返回用戶的數(shù)據(jù)庫(kù)ID 號(hào).其返回值類(lèi)型為INT. 如果沒(méi)有指定user_name, 則返回當(dāng)前用戶的數(shù)據(jù)庫(kù)ID 號(hào).
例4-102:
·USER_NAME() USER_NAME() 函數(shù)語(yǔ)法如下: USER_NAME ([user_id]) USER_NAME() 函數(shù)根據(jù)用戶的數(shù)據(jù)庫(kù)ID 號(hào)返回用戶的數(shù)據(jù)庫(kù)用戶名.其返回值類(lèi)型為NCHAR. 如果沒(méi)有指定user_id, 則返回當(dāng)前數(shù)據(jù)庫(kù)的用戶名.
例4-103:
9、TEXT 和IMAGE 函數(shù) ·TEXTPTR() TEXTPTR() 函數(shù)語(yǔ)法如下: TEXTPTR (<column>) TEXTPTR() 函數(shù)返回一個(gè)指向存儲(chǔ)文本的第一個(gè)數(shù)據(jù)庫(kù)頁(yè)的指針.其返回值是一個(gè)VARBINARY (16) 類(lèi)型的二進(jìn)制字符串.如果數(shù)據(jù)類(lèi)型為T(mén)EXT、 NTEXT 或IMAGE的列沒(méi)有賦予初值,則TEXTPTR() 函數(shù)返回一個(gè)NULL 指針.
例4-104:
·TEXTVALID() TEXTVALID() 函數(shù)語(yǔ)法如下: TEXTVALID (<‘table.column‘>, <text_ pointer>) TEXTVALID() 函數(shù)用于檢查指定的文本指針是否有效.如果有效,則返回1; 無(wú)效,則返回0. 如果列未賦予初值,則返回NULL 值.
例4-105:
10、NILADIC 函數(shù) NILADIC 函數(shù)返回一個(gè)用戶或時(shí)間戳值.這類(lèi)函數(shù)均不帶參數(shù).NILADIC 函數(shù)經(jīng)常被定義為CREATE 或ALERT TABLE 語(yǔ)句中DEFAULT 約束的一部分,可參見(jiàn)"管理數(shù)據(jù)庫(kù)表"章節(jié).主要的NILADIC 函數(shù)如下:
·CURRENT_TIMESTAMP CURRENT_TIMESTAMP 函數(shù)語(yǔ)法如下: CURRENT_TIMESTAMP CURRENT_TIMESTAMP 函數(shù)返回當(dāng)前的日期和時(shí)間,等同于GETDATE() 函數(shù).返回值類(lèi)型為DATETIME.
例4-106:
·CURRENT_USER CURRENT_USER 函數(shù)語(yǔ)法如下: CURRENT_USER CURRENT_USER 函數(shù)與USER_NAME() 函數(shù)功能相同,返回當(dāng)前用戶的數(shù)據(jù)庫(kù)用戶名.返回值類(lèi)型為SYSNAME.
例4-107:
·SESSION_USER SESSION_USER 函數(shù)語(yǔ)法如下: SESSION_USER SESSION_USER 函數(shù)等同于USER_NAME() 函數(shù),返回當(dāng)前用戶的數(shù)據(jù)庫(kù)用戶名.返回值類(lèi)型為NCHAR.
·SYSTEM_USER SYSTEM_USER 函數(shù)語(yǔ)法如下: SYSTEM_USER SYSTEM_USER 返回當(dāng)前系統(tǒng)的用戶名.如果用戶是以Windows NT 認(rèn)證方式登錄SQL Server 的,則會(huì)返回Windows NT 的登錄名;如果用戶是以SQL Server 認(rèn)證方式登錄的,則返回SQL Server 中的用戶名.
例4-108:
·USER USER 函數(shù)語(yǔ)法如下: USER USER 與系統(tǒng)函數(shù)USER_NAME() 的功能相同,返回當(dāng)前用戶的數(shù)據(jù)庫(kù)用戶名.返回值類(lèi)型為CHAR.
例4-109:
11、用戶自定義函數(shù) 從SQL Server 2000 開(kāi)始,用戶可以自定義函數(shù)了.在SQL Server 2000 中用戶自定義函數(shù)是作為一個(gè)數(shù)據(jù)庫(kù)對(duì)象來(lái)管理的,可以使用企業(yè)管理器(Enterprise Manager) 或Transact-SQL 命令來(lái)創(chuàng)建、修改、刪除.其具體方法請(qǐng)參見(jiàn)第13 章"游標(biāo)、視圖和自定義函數(shù)".
本章介紹了Transact-SQL 語(yǔ)言的基本概念,及其使用方法.Transact-SQL 語(yǔ)言需要大量的實(shí)踐,才能熟練運(yùn)用.本章及以后的SQL 語(yǔ)法基本上都是標(biāo)準(zhǔn)的ANSI SQL 兼容語(yǔ)法,在其它數(shù)據(jù)庫(kù)中,如ORACLE、 SYBASE、 INFORMIX、 FOXPRO 等,大部分語(yǔ)句均可套用.
|