sql server 常用函數

常用函數

sql server 爲T-SQL語言提供了大量的系統函數,使用戶對數據庫查詢和修改時更加方便,同時還允許用戶使用自定義函數。本章介紹常用的聚合,數學,字符串,日期和時間函數以及如何自定義函數。

爲了便於測試函數先創建數據庫

use master
if exists(select * from sysdatabases where name ='test2014129')
 drop database test2014129
create database test2014129
on primary
(
	name='test2014129',
	filename='G:\sql08\MSSQL10.MSSQLSERVER\MSSQL\DATA\test2014129.mdf',
	size=5,
	filegrowth=1
)
log on 
(
	name='test2014129log',
	filename='G:\sql08\MSSQL10.MSSQLSERVER\MSSQL\DATA\test2014129log.ldf',
	size=5,
	filegrowth=1
)


聚合函數

聚合函數經常與select語句的group by子句一起使用,所有的聚合函數均爲確定性函數,也就是說只要使用一組特定的輸入值調用聚合函數,該函數總是返回特定的值。它可以對一組值執行計算,並返回單個值。

除了count函數以外,其他聚合函數會忽略空置。


以下用代碼測試這些函數,創建學生表

/*id-姓名-年齡-分數-年級-班級*/

use test2014129
if exists(select * from sysobjects where name ='stuinfo')
 drop table stuinfo
create table stuinfo(
	id int identity(1,1) primary key,
	name varchar(12) not null,
	age int constraint CK_AGE CHECK(age>=18 and age<=22) default(18) not null,
	score real constraint CK_SCORE check(score>=0 and score<=100) not null,
	grade int not null,
	class int not null
)

插入數據

insert into stuinfo(name,age,score,grade,class)
select 'czk',18,80,1,1 union
select 'czk1',18,50,2,2 union
select 'czk2',19,60,1,3 union
select 'czk3',20,80,2,1 union
select 'czk4',21,20,1,3 union
select 'czk5',22,40,2,1 union
select 'czk6',19,50,3,2 union
select 'czk7',19,60,3,1 


使用函數查詢

/*AVG函數查詢每個年級的平均成績*/
select grade as '年級',AVG(score)as '平均成績' from stuinfo group by grade
/*COUNT函數查詢記錄總數*/
select count(*) as 記錄總數 from stuinfo 
/*MAX查詢班級最高分*/
select MAX(score) as 最高分 from stuinfo
/*MIN查詢班級最低分*/
select MIN(score) as 最低分 from stuinfo
/*SUM查詢總分*/
select SUM(score) as 總分 from stuinfo

數學函數

SQL Server提供了20多個用於處理整數與浮點值的數學函數。這些數學函數包括可在任何編程語言中發現的所有常用函數


select CEILING(43.2)--返回44
select FLOOR(43.9)--返回43
select SQRT(100)--10


字符串函數


/*查看a的ascii代碼*/
select ASCII('a')--返回97
/*查看ascii代碼對應的字符*/
select CHAR(97)--返回a
/*返回從左邊開始2個字符長度的字符串*/
select left('中國people',2)--返回中國
/*返回字符數*/
select LEN('中國people ') as '字符數'--返回8
/*LTRIM刪除前導功空格字符串*/
select LTRIM(' 中國People')
/*REPLACE*/
select REPLACE('計算機大展','展','賽')--計算機大賽
/*RTRIM刪除字符串右邊尾部空格*/
select RTRIM(' 中國People ')
/*SPACE打印空格*/
select 'a'+SPACE(2)+'b'--a  b
/*STR int轉varchar*/
select STR(120.123,3,0)--120
/*SUBSTRING*/
select SUBSTRING('abcd',1,2)--ab
/*STUFF 從第三個位置開始刪除2個字符後插入新的字符串*/
select STUFF('計算機天地',3,2,'圖書')--計算機圖書
/*查找字符p在字符串的第幾個位置*/
select CHARINDEX('p','中國people')
/*查找從第四個字符開始後的p在字符串的第幾個位置*/
select CHARINDEX('p','中國people',4)




日期和時間函數




/*查詢當前系統日期*/
select GETDATE()
/*DATEADD將指定的數值添加到指定的日期部分後的日期*/
select DATEADD(YY,1,'00-1-1')--增加一年
select DATEADD(MM,4,'00-1-1')--增加4個月
select DATEADD(DD,-1,'00-1-1')--減少一天(查詢昨天)
/*DATEDIFF兩個日期指定部分的區別*/
select DATEDIFF(MM,'14-2-2','14-10-5')--相差8個月、
/*DATENAME查詢時間來的某個字段*/
select DATENAME(YY,GETDATE())--2014
select DATENAME(DW,GETDATE())--星期二
select '今天是公元'+DATENAME(YY,GETDATE())+'年'
+DATENAME(MM,getdate())+'月'
+DATENAME(DD,GETDATE())+'日'
+DATENAME(HH,GETDATE())+'點'
+DATENAME(mi,GETDATE())+'分'
+DATENAME(SS,GETDATE())+'秒'
+datename(DW,GETDATE())
--今天是公元2014年12月9日14點8分14秒星期二

系統函數

select CONVERT(varchar(6),12345)+'678'--將int轉varchar
select DATALENGTH('我叫tom')--中文算2個字節


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