T-SQL 查詢中使用的函數之系統函數
2024-07-21 02:07:31
供稿:網友
查詢中使用的函數
在查詢語句中,不僅可查詢表中列的值而且可以使用內部函數查詢數據庫中不同類型的信息。可以在select列表,where子句和任何允許表達式的地方使用內部函數。這些函數都是t-sql對sql的擴展。adaptive server提供的內部函數可以分成以下幾類:
l 系統函數。返回數據庫中的信息;
l 字符串函數。用于處理字符串或字符串表達式;
l text函數。用于處理text和image類型的數據;
l 數學類型。用于處理三角、幾何以及其它數據處理的函數;
l 日期函數。處理datetime和smalldatetime類型的數據;
l 數據類型轉換函數(convert)。用于將一種數據類型轉換成另一種數據類型,也可將日期格式化成各種形式。
l 安全函數。返回安全服務和用戶自定義角色的信息
一、系統函數
系統函數從數據庫返回特定的信息,它們中的大多數提供了查詢系統表的簡便方式。
系統函數的一般語法:
select function_name ( argument[s] )
系統函數可以用在選擇項里、where子句里以及任何允許表達式存在的地方。例如:如果要查詢“zyf”的用戶標示號,則輸入:
select “用戶標示號” =user_id ( “zyf” )
結果:
用戶標示號
——
3
一般來說,函數名表示里將返回什么樣的信息。
user_name用id號作參數而返回用戶的名字。如下,如果查詢id號為3的用戶名
select “用戶名” = user_name(3)
結果:
用戶名
——
zyf
找出當前用戶的名字(也就是正在使用的用戶名)
select user_name()
結果:
用戶名
——
dbo
adaptive server按照如下的規則處理用戶標示符:
l 當系統管理員成為他使用的數據庫的所有者時,其登陸用戶id被指定為1;
l guest用戶的登陸用戶id總是-1
l 數據庫所有者的用戶總是dbo,他的用戶id是1;
l guest用戶的id是2
系統函數表
函數名
參數
返回結果
col_name
(object_id,column_id[,database_id])
列名
col_length
(object_name,column_name)
列的定義長度(使用datalength是查看實際數據的長度)
curunreservedpgs
(dbid,lstart,unreservedpgs)
磁盤片中的空閑頁數。如果數據庫是打開的,則該值來自于內存;如果數據庫沒有打開則該值來自于系統表sysusages中列unreservedpgs
data_pgs
(object_id,{doampg | ioampg})
被表(doampg)或索引(ioampg)使用的頁數。該結果不包括內部結果使用的頁數
datalength
(expression)
返回expression的長度。expression可以是列名也可以是字符串常量。如果是列名則返回列中實際數據的長度。
db_id
([database_name])
數據庫的id號。數據庫名必須為字符表達式,如果數據庫名為字符常量,則必須用引號將其引起來。如果沒有給出數據庫名,則返回當前數據庫的id號
db_name
([database_id])
數據庫名。database_id必須是數值表達式如果沒有給出database_id,則返回當前數據庫名。
host_id
()
客戶進程(非adaptive server進程)的當前主機名
host_name
()
索引列名。如果object_name 不是表名或視圖名,則返回null
index_col
(object_name,index_id,key_#[,user_id])
當expression1為null時,用expression2的值來代替expression1的值。表達式的值必須可隱式地轉化,否則必須使用convert函數
isnull
(expression1,expression2)
管理日志段的最后機?值。lastchance:在指定的數據庫中創建一個最后機會值;當指定數據庫的最后機會值被超過時返回1,否則返回0;unsuspend:用以喚醒數據庫中掛起的任務并且當最后機會值被超過時使用該機會值無效;reserve:返回要成功地轉儲指定大小的一個事務日志時所需的自由日志頁的數目。
lct_admin
({{“lastchance”|”logfull”|”unsuspend”}
,database_id}|
“reserve”
,log_pages})
分配給表或索引的頁數
reserved_pgs
(object_id,{doampg|ioampg})
表中行數的估計值
rowent
(doampg)
數據庫對象id號
object_id
(“objname”)
數據庫對象名
object_name
(obj_id)
從表syslogins中返回服務器用的id號,如果沒有給出參數server_user_name的值則返回當前用戶的服務器id號
suser_id
([server_user_name])
返回服務器用戶名,服務器用戶的id號存儲在表syslogins中,如果沒有給出參數server_user_id的值,則返回當前用戶名。
tsequal
(timestamp,timestamp2)
在瀏覽模式下,比較timestamp的值以阻止提交那些被修改過的值。timestamp是被瀏覽行的時間標志;timestamp2是存儲行的時間標志。該函數允許用戶不調用db_library而使用瀏覽模式。
used_pgs
(object_id,doampg,ioampg)
由表和聚簇索引使用的列數
user
用戶名
user_id
([user_name])
用戶的id號。報告當前數據庫中的用戶id號,如果沒有給出參數user_name,返回當前用戶的id號。
user_name
([user_id])
返回與當前數據庫的用戶id號相對應的用戶名。如果沒有提供參數user_id的值,則返回當前用戶名。
valid_name
(character_expression)
如果character_expression是無效的標識符(非法字符或長度超過了30),則返回0;否則返回非0數值
valid_user
(server_user_id)
如果指定的id號在adaptive server的至少一個數據庫中有其對應的用戶名或別名,則返回1;只有sa_role或sso_role角色的用戶才可以使用該函數。
例子:
1、找出表titles中title列的長度
slelect “標題長度”=col_length(“article”,”title”)
結果:
標題長度
-----
120
2、找出表article中title列中數據的長度
select length=datalength(title),title
from article
結果:
length title
24 軟透露其internet 策略
20 a推出兩種網絡新軟件
21 ibm發布新版systemview
3、查找所有作家的工資,如果工資為null值則替換成$10.00
select isnull(salary,$10.00)
from auths
結果:
——
120.00
100.00
110.00
10.00
4、查出系統表sysusers中的用戶id為1的用戶名
select name form sysusers
where name=user_name(1)
結果:
name
——
dbo