字符串函数(二)


8、系统函数
系统函数用于获取有关计算机系统、用户、数据库和数据库对象的信息。系统函数可以让用户在得到信息后,使用条件语句,根据返回的信息进行不同的操作。与其它函数一样,可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用系统函数。

·APP_NAME()
APP_NAME() 函数语法如下:
APP_NAME()
APP_NAME() 函数返回当前执行的应用程序的名称。其返回值类型为nvarchar (128)。

例4-77: 测试当前应用程序是否为SQL Server Query Analyzer

·COALESCE()
COALESCE() 函数语法如下:
COALESCE (

  1<expression> [, ...n])   
  2COALESCE() 函数返回众多表达式中第一个非NULL 表达式的值。如果所有的表达式均为NULL, 则COALESCE() 函数返回NULL 值。COALESCE() 函数等效于下面的CASE 语句:   
  3  
  4CASE   
  5WHEN (expression1 IS NOT NULL) THEN expression1   
  6  7WHEN (expressionN IS NOT NULL) THEN expression   
  8ELSE NULL   
  9  
 10**例4-78:**   
 11![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/19367aaimga83.gif)   
 12  
 13·COL_LENGTH()   
 14COL_LENGTH() 函数语法如下:   
 15COL_LENGTH (&lt;'table_name'&gt;, &lt;'column_name'&gt;)   
 16COL_LENGTH() 函数返回表中指定字段的长度值。其返回值为INT 类型。   
 17  
 18**例4-79:**   
 19![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/22233aaimga84.gif)   
 20  
 21·COL_NAME()   
 22COL_NAME() 函数语法如下:   
 23COL_NAME (<table_id>, <column_id>)   
 24COL_NAME() 函数返回表中指定字段的名称,即列名。其返回值为SYSNAME 类型。其中table_id 和column_id 都是INT 类型的数据,函数用table_id 和column_id 参数来生成列名字符串。关于如何获得table_id 和column_id, 请参见OBJECT_ID() 函数。   
 25  
 26**例4-80:**   
 27![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/83915aaimga85.gif)   
 28![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/47062aaimga86.gif)   
 29  
 30·DATALENGTH()   
 31DATALENGTH() 函数语法如下:   
 32DATALENGTH (<expression>)   
 33DATALENGTH() 函数返回数据表达式的数据的实际长度。其返回值类型为INT。DATALENGTH() 函数对VARCHAR、 VARBINARY、 TEXT、 IMAGE、 NVARCHAR和NTEX 等能存储变动长度数据的数据类型特别实用。NULL 的长度为NULL。   
 34  
 35**例4-81:**   
 36![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/73495aaimga87.gif)   
 37  
 38· DB_ID()   
 39DB_ID() 函数语法如下:   
 40DB_ID (['database_name'])   
 41DB_ID() 函数返回数据库的编号。其返回值为SMALLINT 类型。如果没有指定database_name, 则返回当前数据库的编号。   
 42  
 43**例4-82:**   
 44![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/71245aaimga88.gif)   
 45![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/10776aaimga89.gif)   
 46  
 47·DB_NAME()   
 48DB_NAME() 函数语法如下:   
 49DB_NAME (database_id)   
 50DB_NAME() 函数返回数据库的名称.其返回值类型为NVARCHAR (128). database_id是SMALLINT 类型的数据.如果没有指定database_id, 则返回当前数据库的名称.   
 51  
 52**例4-83:**   
 53![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/22785aaimga90.gif)   
 54  
 55· FORMATMESSAGE()   
 56FORMATMESSAGE() 函数语法如下:   
 57FORMATMESSAGE (<message_number>, <param_value>[, ...n])   
 58FORMATMESSAGE() 函数用于从系统信息表sysmessages 中挑选一条现存的信息,   
 59再将其格式转换为用户需要的形式.其功能类似于RAISERROR 命令,不同的是RAISERROR命令立即打印出信息,而FORMATMESSAGE() 函数返回编辑过的信息给调用它的程序.其返回值类型为NVARCHAR.   
 60其中message_number 是存储在sysmessages 系统表中的信息ID 号.param_value 是在信息中使用的参数.最多可使用20 个参数.   
 61FORMATMESSAGE() 函数查找使用当前语言平台语言的信息,如果没有本地语言的信息,则使用U.S. English 版本语言的信息.   
 62  
 63**例4-84:** 假定有一个编号为10001 的信息存储在sysmessages 表中,此信息的内容为"The Length of rows %column_name in %table_name is %column_num.".FORMATMESSAGE() 函数用值myColumn、 myTable 和20 分别替代上述参数值,将结果存储在变量@test1 中.程序如下:   
 64declare @test1 varchar (100)   
 65select @test1 = formatmessage (10001, 'myColumn', 'myTable', 20)   
 66  
 67·GETANSINULL()   
 68GETANSINULL() 函数语法如下:   
 69GETANSINULL() (['database_name'])   
 70GETANSINULL() 函数返回当前数据库默认的NULL 值.其返回值类型为INT.GETANSINULL() 函数对ANSI 空值NULL 返回1; 如果没有定义ANSI 空值,则返回0.   
 71  
 72**例4-85:  
 73** select getansinull ('pangu')   
 74运行结果如下:   
 75\------   
 761   
 77  
 78·HOST_ID()   
 79HOST_ID() 函数语法如下:   
 80HOST_ID()   
 81HOST_ID() 函数返回服务器端计算机的名称.其返回值类型为NCHAR.   
 82  
 83**例4-86:**   
 84declare @hostID char (8)   
 85select @hostID = host_id()   
 86print @hostID   
 87运行结果如下:   
 88-606771   
 89  
 90·HOST_NAME()   
 91HOST_NAME() 函数语法如下:   
 92HOST_NAME()   
 93HOST_NAME() 函数返回服务器端计算机的名称.其返回值类型为CHAR (8).   
 94  
 95**例4-87:**   
 96declare @hostNAME nchar (20)   
 97select @hostNAME = host_name()   
 98print @hostNAME   
 99  
100运行结果如下:   
101XUJIN   
102  
103·IDENTITY()   
104IDENTITY() 函数语法如下:   
105IDENTITY (<data_type>[, seed, increment]) [AS column_name])   
106IDENTITY() 函数只在SELECT...INTO 语句中使用,用于插入一个identity column列到新表中.其返回值类型与data_type 的类型相同.   
107  
108其中:   
109data_type 指定数据类型.data type 是INTEGER 或DECIMAL 类的数据类型.Seed指定identity column 的初值,即第一个值.Increment 指定增加一个记录时,记录的identity column 值应在前记录的基础上增加的值.seed 和increment 的缺省值为1.column_name 是所插入的identity column 的列名.虽然AS column_name 为可选项,但由于函数在表中插入了一个新列,所以必须指定列名.如果不使用AS column_name 选项,可以使用以下两种方式来指定列名:   
110(1) select identity (int, 1, 1) as column_name   
111into newtable   
112from oldtable   
113(2) select column_name = identity (int, 1, 1)   
114into newtable   
115from oldtable   
116有关identity column 的信息,请参见"管理数据库表"中的"列属性"章节.   
117  
118·IDENT_INCR()   
119IDENT_INCR() 函数语法如下:   
120IDENT_INCR ('table_or_view')   
121IDENT_INCR() 函数返回表中标识性字段identity column 的增量.若无此字段,则返回NULL 值.其返回值类型为NUMERIC.   
122  
123**例4-88:**   
124![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/58992aaimga91.gif)   
125  
126·IDENT_SEED()   
127IDENT_SEED() 函数语法如下:   
128IDENT_SEED (&lt;'table_or_view'&gt;)   
129IDENT_SEED() 函数返回表中标识性字段identity column 的初值.若无此字段,则返回NULL 值.其返回值类型为NUMERIC.   
130  
131**例4-89:**   
132![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/39581aaimga92.gif)   
133  
134·INDEX_COL()   
135INDEX_COL() 函数语法如下:   
136INDEX_COL (&lt;'table_name'&gt;, <index_id>, <key_id>)   
137INDEX_COL() 函数返回表内索引识别码为index_id 的索引的名称,并找出组成该索引的列组合中第key_id 个列名.其返回值类型为NCHAR.   
138  
139**例4-90:**   
140![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/30546aaimga93.gif)   
141![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/52685aaimga94.gif)   
142  
143·ISDATE()   
144ISDATE() 函数语法如下:   
145ISDATE (<expression>)   
146ISDATE() 函数判断所给定的表达式是否为合理日期,如果是则返回1, 不是则返回0.   
147  
148**例4-91:**   
149![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/61664aaimga95.gif)   
150![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/42147aaimga96.gif)   
151  
152·ISNULL()   
153ISNULL() 函数语法如下:   
154ISNULL (<check_expression>, <replacement_value>)   
155ISNULL() 函数将表达式中的NULL 值用指定值替换.如果check_expresssion 不是NULL, 则返回其原来的值,否则,返回replacement_value 的值.   
156  
157**提醒:** reaplacement_value的数据类型应与chech_expresssion一致.   
158  
159**例4-92:**   
160![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/97576aaimga97.gif)   
161  
162·ISNUMERIC()   
163ISNUMERIC() 函数语法如下:   
164ISNUMERIC (<expression>)   
165ISNUMERIC() 函数判断所给定的表达式是否为合理的数值(INTEGER、 FLOATING POINT NUMBER、 MONEY 或DECIMAL 类型),如果是则返回1, 不是则返回0.   
166  
167**提醒:** 检查MONEY型数据时,应先用CONVERT()函数将其转换为数值型或字符型。   
168  
169**例4-93:**   
170![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/45341aaimga98.gif)   
171![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/42185aaimga99.gif)   
172  
173·NEWID   
174NEWID() 函数语法如下:   
175NEWID()   
176NEWID() 函数返回一个UNIQUEIDENTIFIER 类型的数值.此函数使用计算机的网卡的Ethernet 地址加上经由CPU Clock 产生的数字而得到其返回值.由于网卡的Ethernet地址是全球惟一的(在未来近一百年内不会生产出相同Ethernet 地址的网卡),因而函数所产生的数字也是惟一的.   
177  
178**例4-94:**   
179![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/52522aimga100.gif)   
180  
181·NULLIF()   
182NULLIF() 函数语法如下:   
183NULLIF (<expression1>, <expression2>)   
184NULLIF() 函数在expression1 与expression2 相等时返回NULL 值,若不相等时则返回expression1 的值.其返回值类型与expression1 相同.expression1 与expression2 应为同类的数据类型.   
185  
186**例4-95:**   
187![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/30321aimga101.gif)   
188  
189·OBJECT_ID()   
190OBJECT_ID() 函数语法如下:   
191OBJECT_ID (&lt;'object_name'&gt;)   
192OBJECT_ID() 函数返回数据库对象的编号.其返回值类型为INT.   
193  
194**例4-96:**   
195![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/65154aimga102.gif)   
196  
197**提醒:** 当指定一个临时表的表名时,其表名的前面必须加上临时数据库名"tempdb",如:select object_id("tempdb..#mytemptable").   
198  
199·OBJECT_NAME()   
200OBJECT_NAME() 函数语法如下:   
201OBJECT_NAME (<object_id>)   
202OBJECT_NAME() 函数返回数据库对象的名称.其返回值类型为NCHAR.   
203  
204**例4-97:**   
205![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/46287aimga103.gif)   
206  
207·PARSENAME()   
208PARSENAME() 函数语法如下:   
209PARSENAME (&lt;'object_name '&gt;, <object_piece>)   
210PARSENAME() 函数返回一个数据库对象完整名称中的特定部分(对象名称或数据库拥有者名称或数据库名称或服务器名称).其返回值类型为NCHAR.   
211其中object_piece 为INT 类型,其取值如下:   
212对象名称Object name;   
213数据库拥有者名称Owner name;   
214数据库名称Database name;   
215服务器名称Server name.   
216如果object_name 或object_piece 为NULL, 则返回NULL 值.   
217  
218**例4-98:**   
219![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/45599aimga104.gif)   
220  
221·PERMISSIONS()   
222PERMISSIONS() 函数语法如下:   
223PERMISSIONS ([object_id [, 'column_name']])   
224PERMISSIONS() 函数用于获取当前用户对某一对象的存取权限或对某一命令的执行权限.其返回值为一个32 位的bitmap 值,其中低16 位表示目前用户对象的存取权限设定值.高16 位表示用户是否可以开放此对象的权限给其它人.   
225如果不指定object_id, 则函数返回目前用户的命令执行权限的bitmap 值.使用column_name 选项可以得到表的列权限.各权限值见表4-10 至4-12.   
226![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/55002aimga105.gif) ![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/86832aimga106.gif)   
227有关PERMISSIONS() 函数使用方法,我们将在以后的章节分别讲述.   
228  
229·STATS_DATE()   
230STATS_DATE() 函数语法如下:   
231STATS_DATE (<table_id>, <index_id>)   
232STATS_DATE() 函数返回最新的索引统计日期.其返回值类型为DATETIME.   
233  
234**例4-99:**   
235![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/28465aimga107.gif)   
236  
237·SUSER_SID()   
238SUSER_ SID() 函数语法如下:   
239SUSER_SID (['login_name'])   
240SUSER_SID() 函数根据用户登录名返回用户的SID (Security Identification Number,安全帐户名)号.其返回值类型为INT. 如果不指定login_name, 则返回当前用户的SID号.   
241  
242**例4-100:**   
243![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/47204aimga108.gif)   
244  
245·SUSER_SNAME()   
246SUSER_SNAME() 函数语法如下:   
247SUSER_SNAME ([server_user_sid])   
248SUSER_SNAME() 函数根据SID 号返回用户的登录名.如果没有指定server_user_sid,则返回当前用户的登录名.其返回值类型为NCHAR.   
249  
250**例4-101:**   
251![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/61374aimga109.gif)   
252  
253·USER_ID()   
254USER_ID() 函数语法如下:   
255USER_ID (['user_name'])   
256USER_ID() 函数根据用户数据库的用户名返回用户的数据库ID 号.其返回值类型为INT. 如果没有指定user_name, 则返回当前用户的数据库ID 号.   
257  
258**例4-102:**   
259![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/21801aimga110.gif)   
260  
261·USER_NAME()   
262USER_NAME() 函数语法如下:   
263USER_NAME ([user_id])   
264USER_NAME() 函数根据用户的数据库ID 号返回用户的数据库用户名.其返回值类型为NCHAR. 如果没有指定user_id, 则返回当前数据库的用户名.   
265  
266**例4-103:**   
267![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/44913aimga111.gif)   
268  
2699、TEXT 和IMAGE 函数    
270·TEXTPTR()   
271TEXTPTR() 函数语法如下:   
272**TEXTPTR ( <column>) **   
273TEXTPTR() 函数返回一个指向存储文本的第一个数据库页的指针.其返回值是一个VARBINARY (16) 类型的二进制字符串.如果数据类型为TEXT、 NTEXT 或IMAGE的列没有赋予初值,则TEXTPTR() 函数返回一个NULL 指针.   
274  
275**例4-104:**   
276![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/47547aimga112.gif)   
277  
278·TEXTVALID()   
279TEXTVALID() 函数语法如下:   
280**TEXTVALID ( &lt;'table.column'&gt;, <text_ pointer="">) **   
281TEXTVALID() 函数用于检查指定的文本指针是否有效.如果有效,则返回1; 无效,则返回0. 如果列未赋予初值,则返回NULL 值.   
282  
283**例4-105:**   
284![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/66547aimga113.gif)   
285![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/75837aimga114.gif)   
286  
28710、NILADIC 函数    
288NILADIC 函数返回一个用户或时间戳值.这类函数均不带参数.NILADIC 函数经常被定义为CREATE 或ALERT TABLE 语句中DEFAULT 约束的一部分,可参见"管理数据库表"章节.主要的NILADIC 函数如下:   
289  
290·CURRENT_TIMESTAMP   
291CURRENT_TIMESTAMP 函数语法如下:   
292**CURRENT_TIMESTAMP**   
293CURRENT_TIMESTAMP 函数返回当前的日期和时间,等同于GETDATE() 函数.返回值类型为DATETIME.   
294  
295**例4-106:**   
296![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/97768aimga115.gif)   
297  
298·CURRENT_USER   
299CURRENT_USER 函数语法如下:   
300**CURRENT_USER**   
301CURRENT_USER 函数与USER_NAME() 函数功能相同,返回当前用户的数据库用户名.返回值类型为SYSNAME.   
302  
303**例4-107:**   
304![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/81888aimga116.gif) ![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/36820aimga117.gif)   
305  
306·SESSION_USER   
307SESSION_USER 函数语法如下:   
308**SESSION_USER**   
309SESSION_USER 函数等同于USER_NAME() 函数,返回当前用户的数据库用户名.返回值类型为NCHAR.   
310  
311·SYSTEM_USER   
312SYSTEM_USER 函数语法如下:   
313**SYSTEM_USER**   
314SYSTEM_USER 返回当前系统的用户名.如果用户是以Windows NT 认证方式登录SQL Server 的,则会返回Windows NT 的登录名;如果用户是以SQL Server 认证方式登录的,则返回SQL Server 中的用户名.   
315  
316**例4-108:**   
317![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/16190aimga118.gif)   
318  
319·USER   
320USER 函数语法如下:   
321**USER**   
322USER 与系统函数USER_NAME() 的功能相同,返回当前用户的数据库用户名.返回值类型为CHAR.   
323  
324**例4-109:**   
325![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/37617aimga119.gif)   
326  
32711、用户自定义函数    
328从SQL Server 2000 开始,用户可以自定义函数了.在SQL Server 2000 中用户自定义函数是作为一个数据库对象来管理的,可以使用企业管理器(Enterprise Manager) 或Transact-SQL 命令来创建、修改、删除.其具体方法请参见第13 章"游标、视图和自定义函数".   
329  
330本章介绍了Transact-SQL 语言的基本概念,及其使用方法.Transact-SQL 语言需要大量的实践,才能熟练运用.本章及以后的SQL 语法基本上都是标准的ANSI SQL 兼容语法,在其它数据库中,如ORACLE、 SYBASE、 INFORMIX、 FOXPRO 等,大部分语句均可套用.</text_></column></index_id></table_id></object_piece></object_id></expression2></expression1></expression></replacement_value></check_expression></expression></key_id></index_id></data_type></param_value></message_number></expression></column_id></table_id></expression>
Published At
Categories with 数据库类
comments powered by Disqus