T-SQL 查詢中使用的函數之系統函數
來源:互聯網
上載者:User
函數
查詢中使用的函數
在查詢語句中,不僅可查詢表中列的值而且可以使用內建函式查詢資料庫中不同類型的資訊。可以在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