SQL2008 表達式:是常量、變量、列或函數等與運算符的任意組合。sql
1. 字符串函數數據庫
函數 名稱 參數 示例 說明ide
ascii(字符串表達式)函數
select ascii('abc') 返回 97spa
返回字符串中最左側的字符的ASCII 碼。3d
char(整數表達式)code
select char(100) 返回 dxml
把ASCII 碼轉換爲字符。排序
介於0 和 255 之間的整數。若是該整數表達式不在此範圍內,將返回ci
NULL 值。
charindex(字符串表達式 1, 字符串表達式2[,整數表達式])
select charindex('ab','BCabTabD')返回 3
select charindex('ab','BCabTabD',4)返回 6
在字符串2 中查找字符串 1,若是存在返回第一個匹配的位置,若是不存在返回0。若是字符串 1 和字符串 2 中有一個是null 則返回 null。能夠指定在字符串
2 中查找的起始位置。
difference(字符串表達式 1,字符串表達式 2)
select difference('Green','Greene')返回 4
返回一個0 到 4 的整數值,指示兩個字符表達式的之間的類似程度。
0 表示幾乎不一樣或徹底不一樣,
4 表示幾乎相同或徹底相同。
注意類似並不表明相等
left(字符串表達式,整數表達式)
select left('abcdefg',2) 返回 ab
返回字符串中從左邊開始指定個數的字符。
right(字符串表達式,整數表達式)
select right('abcdefg',2) 返回 fg
返回字符串中從右邊開始指定個數的字符。
len(字符串表達式)
select len('abcdefg')返回 7
select len('abcdefg
') 返回 7
返回指定字符串表達式的字符數,其中不包含尾隨空格。
lower(字符串表達式)
select lower('ABCDEF')返回 abcdef
返回大寫字符數據轉換爲小寫的字符表達式。
upper(字符串表達式)
select upper('abcdef')返回 ABCDEF
返回小寫字符數據轉換爲大寫的字符表達式。
ltrim(字符串表達式)
select ltrim('
abc')返回 abc
返回刪除了前導空格以後的字符表達式。
rtrim(字符串表達式)
select rtrim('abc
')返回 abc
返回刪除了尾隨空格以後的字符表達式。
patindex(字符串表達式 1,字符串表達式 2)
select patindex('%ab%','123ab456')返回4
select patindex('ab%','123ab456')返回0
select patindex('___ab%','123ab456')返回1
select patindex('___ab_','123ab456')返回0
在字符串表達式
1 中可使用通配符,此字符串的第一個
字符和最後一個字符一般是
%。
%表示任意多個字符,_表示任意字符
返回字符串表達式
2 中字符串表達式 1 所指定模式第一次出現的起始位置。沒有找到返回0
reverse(字符串表達式)
select reverse('abcde')返回 edcba
返回指定字符串反轉後的新字符串
space(整數表達式)
select 'a'+space(2)+'b' 返回 a b
返回由指定數目的空格組成的字符串。
str
(float 型小數[,總長度[,小數點
後保留的位數]])
select str(123.451)返回
123(123前面有空格)
select str(123.451,3)返回123
select str(123.451,7,3)返回123.451
select str(123.451,7,1)返回123.5
select str(123.451,5,3)返回123.5
select str(123.651,2)返回**
返回由數字轉換成的字符串。返回字符數不到總長度的前面補
空格,超過總長度的截斷小數位。若是須要截斷整數位則返回
**。
注意在截斷時遵循四捨五入
總長度。它包括小數點、符號、數字以及空格。默認值爲
10。
小數點後最多保留
16 位。默認不保留小數點後面的數字
stuff
(字符串表達式 1,開始位置,長度,字符串表達式 2)
select stuff('abcdef',2,2,'123')
返回 a123def
在字符串表達式
1 中在指定的開始位置刪除指定長度的字符,
並在指定的開始位置處插入字符串表達式
2。返回新字符串
substring(字符串表達式,開始位置,長度)
select substring('abcdef',2,2)返回bc
返回子字符串
replace(字符串表達式 1,字符串表達式 2,字符串表達式 3)
Select replace('abcttabchhabc','abc','123')
返回 123tt123hh123
用字符串表達式
3 替換字符串表達式 1 中出現的全部字符串表
達式
2 的匹配項。返回新的字符串
2. 日期和時間函數
函數名稱
參數 示例 說明
dateadd(日期部分,數字,日期)
select dateadd(year,45,'1990-12-11')
返回 2035-12-11 00:00:00.000
select dateadd(month,45,'1990-12-11')
返回 1994-09-11 00:00:00.000
select dateadd(mm,45,'1990-12-11')
返回 1994-09-11 00:00:00.000
select dateadd(qq,12,'1990-12-11')
返回 1993-12-11 00:00:00.000
select dateadd(hh,12,'1990-12-11')
返回 1990-12-11 12:00:00.000
select dateadd(yy,-12,'1990-12-11')
返回 1978-12-11 00:00:00.000
返回給指定日期加上一個時間間隔後的新的日期值。
數字:用於與指定的日期部分相加的值。若是指定了非整數值,
則將捨棄該值的小數部分,捨棄時不遵循四捨五入。
日期:指定的原日期
在此函數中
dw,dy,dd 效果同樣都表示天
datediff(日期部分,開始日期,結束日期)
select
datediff(yy,'1990-12-11','2008-9-10')
返回兩個指定日期的指定日期部分的差的整數值。
在計算時由結束日期減去開始日期
返回 18
selectdatediff(mm,'2007-12-11','2008-9-10')
返回 9
在此函數中
dw,dy,dd 效果同樣都表示天
datename(日期部分,日期)
select datename(mm,'2007-12-11')返回 12
select datename(dw,'2007-12-11')返回星期二
select datename(dd, '2007-12-11')返回 11
返回表示指定日期的指定日期部分的字符串。
dw 表示一星期中星期幾,wk 表示一年中的第幾個星期
dy 表示一年中的第幾天
datepart
(日期部分,日期)
select datepart(mm,'2007-12-11')返回 12
select datepart(dw,'2007-12-11')返回 3
select datepart(dd, '2007-12-11')返回 11
返回表示指定日期的指定日期部分的整數。
wk 表示一年中的第幾個星期
dy 表示一年中的第幾天,
dw 表示一星期中星期幾,返回整數默認 1 爲星期天
getdate無參數
select getdate()
返回 2009-04-28 18:57:24.153
返回當前系統日期和時間。
day
(日期)
select day('2007-12-11')返回 11
返回一個整數,表示指定日期的天的部分。
等價於
datepart(dd, 日期)
month
(日期)
select month('2007-12-11')返回 12
返回一個整數,表示指定日期的月的部分。
等價於
datepart(mm, 日期)
year
(日期)
select year('2007-12-11')返回2007
返回一個整數,表示指定日期的年的部分。
等價於
datepart(yy, 日期)
getutcdate
無參數
select getutcdate()
返回2009-04-28 10:57:24.153
返回表示當前的
UTC(世界標準時間)時間。即格林尼治時間
(
GMT)
3. 日期部分(指定要返回新值的日期的組成部分。下表列出了 Microsoft SQL Server 2008 可識別的日期部分及其縮寫。)
日期部分
含義
縮寫year年yy, yyyy
quarter季qq, q
month月mm, m
dayofyear天(請看函數中的說明)dy, y
day天(請看函數中的說明)dd, d
week星期wk, ww
weekday天(請看函數中的說明)dw, w
hour小時hh
minute分鐘mi, n
second秒ss, s
millisecond毫秒ms
4. 數學函數
函數名稱 參數 示例 說明
abs(數值表達式)
select abs(-23.4)返回 23.4
返回指定數值表達式的絕對值(正值)
pi無參數
select pi()返回 3.14159265358979
返回π的值
cos(浮點表達式)
select cos(pi()/3)返回 0.5
返回指定弧度的餘弦值
sin(浮點表達式)
select sin(pi()/6)返回 0.5
返回指定弧度的正弦值
cot(浮點表達式)
select cot(pi()/4)返回 1
返回指定弧度的餘切值
tan(浮點表達式)
select tan(pi()/4)返回 1
返回指定弧度的正切值
acos(浮點表達式)
select acos(0.5)返回 1.0471975511966
返回其他弦是所指定的數值表達式的弧度,求反餘弦
asin(浮點表達式)
select asin(0.5)返回 0.523598775598299
返回其正弦是所指定的數值表達式的弧度,求反正弦
atan(浮點表達式)
select atan(1)返回0.785398163397448
返回其正切是所指定的數值表達式的弧度,求反正切
degrees
(數值表達式)
select degrees(pi()/4) 返回45
返回以弧度指定的角的相應角度。
radians(數值表達式)
select radians(180.0)
返回3.1415926535897931
返回指定度數的弧度值。注意若是傳入整數值則返回的結果將
會省略小數部分
exp(浮點表達式)
select exp(4)返回54.5981500331442
返回求
e 的指定次冪,e=2.718281…
log(浮點表達式)
select log(6)返回1.79175946922805
返回以 e 爲底的對數,求天然對數。
Log10(浮點表達式)
select log10(100)返回2
返回以 10 爲底的對數
ceiling(數值表達式)
select ceiling(5.44)返回6
select ceiling(-8.44)返回-8
返回大於或等於指定數值表達式的最小整數。
floor(數值表達式)
select floor(5.44)返回5
select floor(-8.44)返回-9
返回小於或等於指定數值表達式的最大整數。
power(數值表達式 1,數值表達式 2)
select power(5,2)返回25
返回數值表達式
1 的數值表達式 2 次冪
sqrt(數值表達式)
select sqrt(25)返回5
返回數值表達式的平方根
sign(數值表達式)
select sign(6)返回1
select sign(-6)返回-1
select sign(0)返回0
表達式爲正返回+1
表達式爲負返回-1
表達式爲零返回0
rand([整數表達式])
select rand(100)返回0.715436657367485
select rand()返回0.28463380767982
select rand()返回0.0131039082850364
返回從0 到 1 之間的隨機 float 值。整數表達式爲種子,使用相同的種子產生隨機數相同。即便用同一個種子值重複調用RAND() 會返回相同的結果。不指定種子則系統會隨機生成種子。
round(數值表達式[,長度[,操做方式]])
select round(1236.555,2)返回1236.560
select round(1236.555,2,1)返回1236.550
select round(1236.555,0)返回1237.000
select round(1236.555,-1)返回1240.000
select round(1236.555,-1,1)返回1230.000
select round(1236.555,-2)返回1200.000
select round(1236.555,-3)返回1000.000
select round(1236.555,-4)返回0.000
select round(5236.555,-4)出現錯誤
select round(5236.555,-4,1)返回0.000
返回一個數值,舍入到指定的長度。注意返回的數值和原數值
的總位數沒有變化。
長度:舍入精度。若是長度爲正數,則將數值舍入到長度指定的小數位數。若是長度爲負數,則將數值小數點左邊部分舍入到長度指定的長度。注意若是長度爲負數而且大於小數點前的數字個數,則將返回0。若是長度爲負數而且等於小數點前的數字個數且操做方式爲四捨五入時,最前面的一位小於5 返回 0,大於等於 5 致使錯誤出現,若是操做方法不是四捨五入時則不會出現錯誤,返回結果一概爲0。
操做方式:默認爲 0 遵循四捨五入,指定其餘整數值則直接截斷。
5. 數據類型轉換函數
(如下兩種函數功能相似,可是 convert 在進行日期轉換時還提供了豐富的樣式,cast 只能進行普通的日期轉換)
函數名稱 參數 示例 描述
convert(數據類型[(長度)],表達式[,樣式])
select convert(nvarchar,123) 返回123
select N'年齡:'+convert(nvarchar,23)
返回 年齡:23(注意:若是想要在結果中正確顯示中
文須要在給定的字符串前面加上 N,加 N 是爲了使數據庫識別Unicode 字符)
select convert(nvarchar ,getdate())
將一種數據類型的表達式顯式轉換爲另外一種數據類型的表達式。長度:若是數據類型容許設置長度,能夠設置長度,例如varchar(10)樣式:用於將日期類型數據轉換爲字符數據類型的日期格式的樣式。見下表
返回 04 28 2009 10:21PM
select convert(nvarchar ,getdate(),101)
返回 04/28/2009
select convert(nvarchar ,getdate(),120)
返回 2009-04-28 12:22:21
Select convert(nvarchar(10) ,getdate(),120)
返回 2009-04-28
cast(表達式 as 數據類型[(長度)])
select cast(123 as nvarchar)返回 123
select N'年齡:'+cast(23 as nvarchar)
返回 年齡:23
將一種數據類型的表達式顯式轉換爲另外一種數據類型的表達式。日期類型數據轉爲字符數據類型的日期格式的部分樣式表當兩個不一樣數據類型的表達式用運算符組合後,數據類型優先級規則指定將優先級較低的數據類型優先轉換爲優先級較高的型。 若是此轉換不是所支持的隱式轉換,則返回錯誤。 當兩個操做數表達式具備相同的數據類型時,運算的結果便爲該數據類型。若是須要把優先級高的數據類型轉換優先級低的數據類型時須要使用數據類型轉換函數進行顯示轉換。
SQL Server 2005 對數據類型使用如下優先級順序(先高後低):
不帶世紀數位 (yy)
帶世紀數位 (yyyy)
標準
輸入/輸出-
0 或 100
默認設置mon dd yyyy hh:miAM(或 PM)1 101
美國
mm/dd/yyyy 2 102 ANSI yy.mm.dd 3103
英國/法國
dd/mm/yy 4 104
德國
dd.mm.yy 5 105
意大利
dd-mm-yy 120
ODBC 規範
yyyy-mm-ddhh:mi:ss(24h)
一、用戶定義數據類型(最高) 二、sql_variant 三、xml 四、datetime 五、smalldatetime 六、float 七、real 八、decimal 九、money 十、smallmoney 十一、bigint 十二、int 1三、smallint 1四、tinyint 1五、bit 1六、ntext 1七、text 1八、image 1九、timestamp 20、uniqueidentifier
2一、nvarchar(包括 nvarchar(max)) 2二、nchar 2三、varchar (包括 varchar(max)) 2四、char 2五、varbinary(包括 varbinary(max))2六、binary(最低)
系統函數
函數名稱 參數 示例 描述
newid無參數
select newid()
返回 2E6861EF-F4DB-4FFE-85EA-638242F2E5F2
select newid()
返回 09BBDE6F-47C2-4E2E-81E8-AFC50592280C
返回一個GUID(全局惟一表示符)值
isnumeric(任意表達式)
select isnumeric(1111)返回1
select isnumeric('123rr')返回0
select isnumeric('123')返回 1
判斷表達式是否爲數值類型或者是否能夠轉換成數值。是返回1,不是返回 0
isnull(任意表達式 1,任意表達式 2)
select isnull(null,N'沒有值')返回 沒有值
select isnull(N'具體的值',N'沒有值')
返回 具體的值
若是任意表達式
1 不爲 NULL,則返回它的值;不然,在將任意表達式
2 的類型轉換爲任意表達式 1 的類型(若是這兩個類型不一樣)後,返回任意表式
2 的值。
isdate(任意表達式)
select isdate(getdate()) 返回1
select isdate('1988-1-1')返回1
select isdate('198')返回0
肯定輸入表達式是否爲有效日期或可轉成有效的日期。是返回1,不是返回 0
排名函數
排名函數的經常使用使用格式:函數名() over (order by 列名 [asc|desc][,列名……])
注意:返回結果集會根據使用排名函數時指定的列進行排序,所以不要在 from 子句後面再次使用 order by,會致使排名混亂。
函數名稱
參數 示例 描述
row_number無參數
select roductID,[Name],ListPrice, row_number()
over(order by ListPrice desc) as rank from Production.Product
爲結果集內每一行進行編號,從1開始後面行依次加 1。
rank無參數
select ProductID,[Name],ListPrice,rank()
over(order by ListPrice desc) as rank
from Production.Product
若是兩個或多個行與一個排名關聯,則每一個關聯行將獲得相同的排名,排名不連續。例如,若是有價格最高的兩種產品的價格相同,它們將列第一。因爲已有兩行排名在前,因此具備下一個最高價格的產品將排名第三。該排名等於該行以前的全部行數加一。所以,
RANK 函數並不總返回連續整數。
dense_rank
無參數
select
ProductID,[Name],ListPrice,dense_rank()
over(order by ListPrice desc) as rank
from Production.Product
若是兩個或多個行與一個排名關聯,則每一個關聯行將獲得相同的排名,排名連續。
例如,若是有價格最高的兩種產品的價格相同,它們將並列第一,下一個最高價
格的產品將排名第二。所以,
DENSE_RANK 函數返回的數字沒有間斷,而且始
終具備連續的排名。
聚合函數
聚合函數對一組值執行計算
,並返回單個值。除了 COUNT 之外,聚合函數都會忽略空值。聚合函數常常與 SELECT 語句的 GROUP BY 子
句一塊兒使用。聚合函數的經常使用使用格式:函數名([all|distinct] 表達式)
all:默認值,對全部的值進行聚合函數運算包含重複值。distinct: 消
除重複值後進行聚合函數運算。
函數名稱 示例 描述
avg
SELECT avg(VacationHours)as '平均休假小時數'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%'
返回 25
返回組中各值的平均值。空值將被忽略。 表達式爲數值表達式。
count
SELECT count(*)FROM Production.Product 返回504
SELECT count(Color)FROM Production.Product 返回 256
SELECT count(distinct Color)FROM Production.Product
返回 9
返回組中的項數。COUNT(*) 返回組中的項數。包括 NULL 值和重複項。若是指定
表達式則忽略空值。表達式爲任意表達式。
min
select min(ListPrice)from Production.Product返回0
返回組中的最小值。空值將被忽略。表達式爲數值表達式,字符串表達式,日期。
max
select max(ListPrice) from Production.Product
返回3578.27
返回組中的最大值。空值將被忽略。表達式爲數值表達式,字符串表達式,日期。
sum
SELECT sum(SickLeaveHours) as '總病假小時數'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%'; 返回97
返回組中全部值的和。空值將被忽略。表達式爲數值表達式