- 字符串函數
- 聚合函數
- 數學函數
- 日期函數
- 字符串函數
- 其他函數
字符串函數
- 字符串長度:LENGTH
- 字符串轉換爲小寫:LOWER
- 字符串轉換爲大寫:UPPER
- 截去字符串左側空格:LTRIM
- 截去字符串左側空格:RTRIM
- 截去字符串兩側空格:TRIM
- 取子字符串:SUBSTRING
- 從左側取子字符串:LEFT
- 從右側取子字符串:RIGHT
- 字符串的替換:REPLACE
- 由字符得到ASCII碼:ASCII
- 由ASCII碼得到字符:CHAR
- 發音匹配度:SOUDEX DIFFERENCE:有的時候我們並不知道一個人姓名的準確拼寫,只知道它的發音,這是在公安、醫療、教育等系統中是經常需要的功能,比如 “檢索名字發音爲和[jeck]類似的人員” ,這時我們就要進行發音的匹配度測試了。SQL 中提供了 SOUNDEX()函數用於計算一個字符串的發音特徵值,這個特徵值爲一個四個字符的字符串, 特徵值的第一個字符總是初始字符串中的第一個字符, 而其後則是一個三位數字的數值。下面的 SQL 語句用於查詢幾個名字的發音特徵值:MYSQL,MSSQLServer:
SELECT SOUNDEX('jack'), SOUNDEX('jeck'), SOUNDEX('joke'),SOUNDEX('juke'), SOUNDEX('look'), SOUNDEX('jobe') - 下面的 SQL 語句用來計算每個人的姓名發音與“Merry”的相似度:SELECTDIFFERENCE(FName,'Merry') FROMT_Person 。執行完畢我們就能在輸出結果中看到下面的執行結果:
FName
T om Merry 2
Jim Merry 1
Lily Merry 2
Kelly Merry 3
Sam Merry 2
Kerry Merry 3
Smith Merry 0
BillGates Merry 1
可以看到 Kerry、Kelly 與 Merry 的發音相似度非常高。
數學函數
1、POWER()函數:用來計算指數的函數。該函數接受兩個參數,第一個參數爲待求冪的表達式,第二個參數爲冪。執行下面的 SQL 語句:
select POWER(3,2);顯示結果是9
2、RAND()函數用來生成隨機算法。RAND()函數還支持一個參數,這個參數爲隨機數種子,例如執行下面的結果
select RAND(1000) union all
select RAND(2000) union all
select RAND(3000) union all
select RAND(4000) union all
select RAND(5000) union all
select RAND(6000)
--產生的數字是
0.732206331499865
0.750839302758065
0.769472274016265
0.788105245274465
0.806738216532665
0.825371187790865
由此我們可以看出RAND函數括號裏面放一個數字後將產生一個固定的隨機數。那麼如何產生隨機的數,例如想隨機產生1-10的隨機數?SQL語句可以這麼寫:
select rand()*11
但產生的結果是 2.04988385549992 這麼長一串,我們只想要整數部份,不想要小數部份,那麼該怎麼辦?
select LEFT(rand()*11,1);
可是經過多次測試後並沒有取出10,因爲LEFT只能截取一位數,而10是兩位數字。那麼該怎麼取才正確?正確的取法如下:
select cast(rand()*11 as int)
3、求圓周率
select 2*PI(); 結果:6.28318530717959
其他的數學函數有
- 平方根:SQRT
- 舍入到最大整數:CEILING
- 舍入到最小整數:FLOOR
- 四捨五入:ROUND
- 正弦值:SIN
- 餘弦值:COS
- 反正弦值:ASIN
- 反餘弦值:ACOS
- 正切值:TAN
- 餘切值:COT
- 圓周率:PI
- 弧度制轉換爲角度制:用來將一個數值從弧度制轉換爲角度制的函數爲 DEGREES (),它接受一個參數,這個參數爲待轉換的表達式。在 Oracle 和 DB2 中不支持這個函數,不過根據:角度制=弧度制*180/π
- 角度制轉換爲弧度制:用來將一個數值從角度制轉換爲弧度制的函數爲 RADIANS (),它接受一個參數,弧度制=角度制*π/180
- 求符號
- 求自然對數:LOG(以E爲底) LOG10(以10爲底)
日期函數
- GETDATE():取得當前日期時間
- DATEADD(DATEPART,NUMBER,DATE): 計算增加以後的日期,參數datepart爲計量單位,number爲增量; 可選值見備註;date爲待計算日期。例如 DATEADD(DAY,3,DATE) 爲計算日期date 3天后的日期
- DATEDIFF(DATEPART,STARTDATE,ENDDATE):計算兩個日期之間的差額,DATEPART爲計量。
- DATEPART(DATEPART,DATE)返回一個日期的特定部份
View Code
--查出當前時間
select getdate()
--將當前時間將3天
select dateadd(day,3,getdate()) 獲得3天以前
--將當前時間月份減一個月
select dateadd(month,-1,getdate()) 獲得1個月以前
--查出當前數據是今年和今月的全部數據
select * from table
where month(date) = month(getdate()) and year(date)= year(getdate())
--datediff 取出兩個日期的時間差
select datediff(day,getdate(),'2012-12-21');
select datediff(second,getdate(),'2012-12-21');
--統計不同入學年數學生個數
select count(*) year(sBirthday)
from student
group by year(sBirthday)
--求每個年齡有多少個學生
select DateDiff(year,sBirthday,getdate()),count(*) from student
Group by DateDiff(year,sBirthday,getdate())
--datename,datepart
select datename(year,getdate()) --字符串
select datepart(year,getdate()) --數字
其他函數:
1、類型轉換函數
MSSQLSERVER裏有兩個類型轉換函數:CAST(EXPRESSION AS DATE_TYPE)、CONVERT(DATA_TYPE,EXPRESSION)
--CAST的測試例子:
selec '平均分數'+cast(23.56 as varchar(5))
--CONVERT的例子
select convert(int,89.123);
select convert(decimal(10,2),89.123);
--獲取 2011-08-09形式的字符串
select convert(varchar(10),getdate(),20) --20表示顯示的日期格式
2、空值處理函數
- COALESCE()函數:將會返回包括expression在內的所有參數中的第一個非空表達式。如果expression不爲空值則返回expression; 否則判斷value1是否是空值, 如果value1不爲空值則返回value1;否則判斷value2是否是空值,如果value2不爲空值則返回value3;……以此類推,如果所有的表達式都爲空值,則返回NULL。
- ISNULL的用法:舉個例子,如果english字段的成績是NULL,我們希望在顯示的時候不要顯示NULL,而用0代碼,那麼這時候可以這麼寫:select studentID,isnull(english,0) from score
select avg(english) from score - CASE...END的用法,CASE的寫法的表達式如下:
CASE EXPRESSION
WHEN VALUE1 THEN RETURNVALUE1
WHEN VALUE2 THEN RETURNVALUE2
ELSE DEFAULTRETURN VALUE
END