1. 程式人生 > >sql server中常用函式集錦(整理)

sql server中常用函式集錦(整理)

1、聚合函式

  這個對於有sql 基礎的人來說,實在再熟悉不過了,在這簡單說明一下,sum,avg,max,min,count,聚合函式不統計值為null的行,我們可以通過distinct過濾掉重複的記錄,也可以通過group by 分組。Count 函式不數帶有 Null 欄位的記錄,除非使用星號,Count 將計算所有記錄的總量,包括有 Null 的欄位的記錄。Count(*) 比 Count ([Column Name]) 快得多。不要將星號放在引號 (' ') 中。如果我們要對某個欄位進行計數,在至少有一個欄位的值不為 Null 的情況下, Count 函式只計算一個記錄。如果全部的指定欄位為 Null,沒有記錄會被計算。使用 (&) 分隔欄位名,可以寫成count('欄位名[&欄位名[&欄位名...]')。

2、數學函式

  ceiling(n):返回不小於n的最小整數

  floor(n):返回不大於n的最大整數

  round(m,n):四捨五入,n為小數的位數

  rand:隨機生成[0,1]之間的float型別值

  sign(expr):當expr為整數、0、負數時分別返回1、0、-1

  sqrt(expr):返回expr的平方根

  abs(expr):返回expr的絕對值

  power(expr,n):返回expr的n次方的值

3、字串函式

  字串函式在處理字串和型別轉換中都起著非常重要的作用。

  1) 字串轉換函式

  a、ASCII(expr):返回expr的最左端的字元的ascii碼值,如果expr是純數字,如1234,則可以寫成ascii(1234),但如果不是純數字,如a1234,則必須加引號,如ascii('a1234');

  b、CHAR(expr):將ascii碼轉換成字元,如果不存在ascii碼為expr的字元,則返回null;

  c、LOWER(expr):將expr全部轉換為小寫

  d、UPPER(expr):將expr全部轉換為大寫

  e、STR(expr,[length,[decimal]]):把數值型資料轉換為字元型資料。length 指定返回的字串的長度,decimal 指定返回的小數位數。如果沒有指定長度,預設的length 值為10, decimal 預設值為0。當length 或者decimal 為負值時,返回NULL; 當length 小於小數點左邊(包括符號位)的位數時,返回length 個*; 先服從length ,再取decimal ; 當返回的字串位數小於length ,左邊補足空格。

4、去空格函式

  1)LTRIM():去左空格

  2)RTRIM():去有空格

5、取子串函式

  1)LEFT(expr,length):取字串expr左邊length個字元

  2)RIGHT(expr,length):取字串expr右邊length個字元

  3)SUBSTRING(expr,start,length):取字串從第start個字元開始的length個字元

  4)CHARINDEX ( expression1 , expression2 [ , start_location ] ) :用來在一段字元中搜索字元或者字串,返回字串中指定表示式的起始位置。其中expression1指定要查詢的字串,expression2是被搜尋的字串,start_location是從expression2的第幾個字元開始搜尋。例如,我們想查詢萊昂納多 迪卡普里奧Leonardo DiCaprio的姓,那麼我們可以這樣來寫 select substring('Leonardo DiCaprio',charindex(' ','Leonardo DiCaprio') + 1,length('Leonardo DiCaprio')).

  5)PATINDEX ( '%pattern%' , expression ):返回expression中'%pattern%'所在的位置,patten前後必須有%。如:

    select patindex('%[d]%','rcrdsddddaadadffdr')

    返回4,[]中d在字串rcrdsddddaadadffdr的第一次出現的位置。

    select patindex('%[cd]%','rcrdsdddrdaadadffdr')

    返回2,[]中c,d在其中一個的位置,返回最先出現的這個位置,c在此字串裡第一次出現位置是2,而d是4,結果取最先的那個。

    select patindex('%[sd]%','rcrdsdddrdaadadffdr')

    返回4,[]中c,d在其中一個的位置,返回最先出現的這個位置,s在此字串裡第一次出現位置是5,而d是4,結果取最先的那個。

    select patindex('%[^r]%','rrrdsdddrdaadadffdr')

    返回4,除[]中的字串的匹配字元,第一次出現d不在[^r]裡,所以就找到第一次這位。

    select patindex('%[^rd]%','rrrdsdddrdaadadffdr')

    返回5,除[]中的字串的匹配字元,第一次出現s不在[^rd]裡,所以就找到第一次這位。

    select patindex('%[^rsd]%','rrrdsdddrdaadadffdr')

    返回11,除[]中的字串的匹配字元,第一次出現a不在[^rsd]裡,所以就找到第一次這位。

 6、日期函式
 
 1.DateAdd ( I , N , D )
將一個日期加上一段期間後的日期。 I :設定一個日期( Date )所加上的一段期間的單位。譬如 interval="d" 表示 N的單位為日。 I的設定值如下:
yyyy Year 年
q Quarter 季
m Month 月
d Day 日

Day of yeary Dy y 一年的日數,一年中的第幾日 1-366
w Weekday 一週的日數,一週中的第幾日 1-7

Weekday Dw w 周,一年中的第幾周 0 ~ 51//sql server 下不可用,不知道怎麼回事
h Hour 時
n Minute 分
s Second 秒
N :數值表示式,設定一個日期所加上的一段期間,可為正值或負值,正值表示加(結果為 >date 以後的日期),負值表示減(結果為 >date 以前的日期)。
D :待加減的日期。
例子: DateAdd ( "m" , 1 , "31-Jan-98")
結果: 28-Feb-98
說明:將日期 31-Jan-98 加上一個月,結果為 28-Feb-98 而非 31-Fe-98 。
例子: DateAdd ( "d" , 20 , "30-Jan-99")
結果: 1999/2/9
說明:將一個日期 30-Jan-99 加上 20 天后的日期。

 

2.Day( 日期的字串或表示式 )、Month(日期的字串或表示式)、Year(日期的字串或表示式)
傳回日期的「日」、「月」、「年」部份。
例子: Day(" 12/1/1999 ")
結果: 1

例子: Month(" 12/1/1999 ")
結果: 12

例子: Year(" 12/1/1999 ")
結果: 1999

 

3.DateDiff (I , D1 , D2[,FW[,FY]])
計算兩個日期之間的期間。
I :設定兩個日期之間的期間計算之單位。譬如 >I="m" 表示計算的單位為月。 >I 的設定值如:
yyyy > Year 年
q Quarter 季
m Month 月
d Day 日

Day of year Dy y 一年的日數,一年中的第幾日 1-366
w Weekday 一週的日數,一週中的第幾日 1-7

Weekday Dw w 周,一年中的第幾周 0 ~ 51
h Hour 時
n Minute 分
s Second 秒
D1 ,D2:計算期間的兩個日期表示式,若 >date1 較早,則兩個日期之間的期間結果為正值;若 >date2 較早, 則結果為負值。

 

4. datepart(I,D) 返回代表指定日期的指定部分的整數。I :設定一個日期( Date )所加上的一段期間的單位。譬如 interval="d" 表示 N的單位為日。 I的設定值如下:
yyyy Year 年
q Quarter 季
m Month 月
d Day 日

Day of year Dy y 一年的日數,一年中的第幾日 1-366
w Weekday 一週的日數,一週中的第幾日 1-7

Weekday Dw w 周,一年中的第幾周 0 ~ 51
h Hour 時
n Minute 分
s Second 秒

D:指定日期。例如:SELECT DATEPART(m, '2004-10-15') --返回 10

 

5.DateName(I,D):返回代表指定日期的指定部分的字串(請注意與datepart的區別)。I :設定一個日期( Date )所加上的一段期間的單位。譬如 interval="d" 表示 N的單位為日。 I的設定值如下:
yyyy Year 年
q Quarter 季
m Month 月
d Day 日

Day of year Dy y 一年的日數,一年中的第幾日 1-366
w Weekday 一週的日數,一週中的第幾日 1-7

Weekday Dw w 周,一年中的第幾周 0 ~ 51
h Hour 時
n Minute 分
s Second 秒

 

D:指定日期。例如:select datename(w,getdate()) --返回 '星期一',再舉一例,注意datepart和datename的區別:

select datepart(m,getdate())   --返回 '7'  (數值7)

 

select datename(month,getdate())   --返回 '07  (字串07)