MSSQLSERVER數據庫- 函數

    SQL提供了很多內置的函數,通過這些函數能進行各種複雜的運算和操作。對數據的處理變得靈活。在學習的過程中沒有必要記住那麼多的數學函數,記住一些常用的就行,在實際的應用中需要到哪些再進行查找。SQL函數的分類可以分爲:
  • 字符串函數
  • 聚合函數
  • 數學函數
  • 日期函數
  • 字符串函數
  • 其他函數

 

字符串函數

  • 字符串長度: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爲底)

 

日期函數

  1. GETDATE():取得當前日期時間
  2.  DATEADD(DATEPART,NUMBER,DATE): 計算增加以後的日期,參數datepart爲計量單位,number爲增量; 可選值見備註;date爲待計算日期。例如 DATEADD(DAY,3,DATE) 爲計算日期date 3天后的日期
  3. DATEDIFF(DATEPART,STARTDATE,ENDDATE):計算兩個日期之間的差額,DATEPART爲計量。
  4. 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、空值處理函數

  1. COALESCE()函數:將會返回包括expression在內的所有參數中的第一個非空表達式。如果expression不爲空值則返回expression; 否則判斷value1是否是空值, 如果value1不爲空值則返回value1;否則判斷value2是否是空值,如果value2不爲空值則返回value3;……以此類推,如果所有的表達式都爲空值,則返回NULL。
  2. ISNULL的用法:舉個例子,如果english字段的成績是NULL,我們希望在顯示的時候不要顯示NULL,而用0代碼,那麼這時候可以這麼寫:select studentID,isnull(english,0) from score
    select avg(english) from score
  3. CASE...END的用法,CASE的寫法的表達式如下:

   CASE EXPRESSION
      WHEN VALUE1 THEN RETURNVALUE1
      WHEN VALUE2 THEN RETURNVALUE2
      ELSE DEFAULTRETURN VALUE
   END

 

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