SQL常用函數集錦_第1頁
SQL常用函數集錦_第2頁
SQL常用函數集錦_第3頁
SQL常用函數集錦_第4頁
SQL常用函數集錦_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一、字符轉換函數1、ASCII()返回字符表達式最左端字符的ASCII 碼值。在ASCII()函數中,純數字的字符串可不用括起來,但含其它字符的字符串必須用括起來使用,否則會出錯。2、CHAR()將ASCII 碼轉換為字符。如果沒有輸入0  255 之間的ASCII 碼值,CHAR() 返回NULL 。3、LOWER()和UPPER()LOWER()將字符串全部轉為小寫;UPPER()將字符串全部轉為大寫。4、STR()把數值型數據轉換為字符型數據。STR (<float_expression>

2、;,length, <decimal>)length 指定返回的字符串的長度,decimal 指定返回的小數位數。如果沒有指定長度,缺省的length 值為10, decimal 缺省值為0。當length 或者decimal 為負值時,返回NULL;當length 小于小數點左邊(包括符號位)的位數時,返回length 個*;先服從length ,再取decimal ;當返回的字符串位數小于length ,左邊補足空格。二、去空格函數1、LTRIM()

3、 把字符串頭部的空格去掉。2、RTRIM() 把字符串尾部的空格去掉。三、取子串函數1、left() LEFT (<character_expression>, <integer_expression>)返回character_expression 左起 integer_expression 個字符。2、RIGHT() RIGHT (<character_expression>, <integer_expression>)返回charac

4、ter_expression 右起 integer_expression 個字符。3、SUBSTRING()SUBSTRING (<expression>, <starting_ position>, length)返回從字符串左邊第starting_ position 個字符起length個字符的部分。四、字符串比較函數1、CHARINDEX()返回字符串中某個指定的子串出現的開始位置。CHARINDEX (<substring_expression>,&#

5、160;<expression>)其中substring _expression 是所要查找的字符表達式,expression 可為字符串也可為列名表達式。如果沒有發現子串,則返回0 值。此函數不能用于TEXT 和IMAGE 數據類型。2、PATINDEX()返回字符串中某個指定的子串出現的開始位置。PATINDEX (<%substring _expression%>, <column_ name>)其中子串表達式前后必須有百分號“%”否則返回值為0。與CH

6、ARINDEX 函數不同的是,PATINDEX函數的子串中可以使用通配符,且此函數可用于CHAR、 VARCHAR 和TEXT 數據類型。五、字符串操作函數1、QUOTENAME()返回被特定字符括起來的字符串。QUOTENAME (<character_expression>, quote_ character) 其中quote_ character 標明括字符串所用的字符,缺省值為“”。2、REPLICATE()返回一個重復character_expression 指定

7、次數的字符串。REPLICATE (character_expression integer_expression) 如果integer_expression 值為負值,則返回NULL 。3、REVERSE()將指定的字符串的字符排列順序顛倒。REVERSE (<character_expression>) 其中character_expression 可以是字符串、常數或一個列的值。4、REPLACE()返回被替換了指定子串的字符串。REPLACE (<string_expressio

8、n1>, <string_expression2>, <string_expression3>) 用string_expression3 替換在string_expression1 中的子串string_expression2。5、SPACE()返回一個有指定長度的空白字符串。SPACE (<integer_expression>) 如果integer_expression 值為負值,則返回NULL 。6、STUFF()用另一子串替換字符串指定位置、長度的子串。S

9、TUFF (<character_expression1>, <start_ position>, <length>,<character_expression2>)如果起始位置為負或長度值為負,或者起始位置大于character_expression1 的長度,則返回NULL 值。如果length 長度大于character_expression1 中 start_ position 以右的長度,則character_expressio

10、n1 只保留首字符。六、數據類型轉換函數1、CAST()CAST (<expression> AS <data_ type> length )2、CONVERT()CONVERT (<data_ type> length , <expression> , style)1)data_type為SQL Server系統定義的數據類型,用戶自定義的數據類型不能在此使用。2)length用于指定數據的長度,

11、缺省值為30。3)把CHAR或VARCHAR類型轉換為諸如INT或SAMLLINT這樣的INTEGER類型、結果必須是帶正號或負號的數值。4)TEXT類型到CHAR或VARCHAR類型轉換最多為8000個字符,即CHAR或VARCHAR數據類型是最大長度。5)IMAGE類型存儲的數據轉換到BINARY或VARBINARY類型,最多為8000個字符。6)把整數值轉換為MONEY或SMALLMONEY類型,按定義的國家的貨幣單位來處理,如人民幣、美元、英鎊等。7)BIT類型的轉換把非零值轉換為1,并仍以BIT類型存儲。8)試圖轉換到不同長度的數據類型,會截短轉換值并在轉換值后顯示“+”,以標識發生

12、了這種截斷。9)用CONVERT()函數的style 選項能以不同的格式顯示日期和時間。style 是將DATATIME 和SMALLDATETIME 數據轉換為字符串時所選用的由SQL Server 系統提供的轉換樣式編號,不同的樣式編號有不同的輸出格式。七、日期函數1、day(date_expression) 返回date_expression中的日期值2、month(date_expression)返回date_expression中的月份值3、year(date_expression)返回date_expressio

13、n中的年份值4、DATEADD()DATEADD (<datepart>, <number>, <date>)返回指定日期date 加上指定的額外日期間隔number 產生的新日期。5、DATEDIFF()DATEDIFF (<datepart>, <date1>, <date2>)返回兩個指定日期在datepart 方面的不同之處,即date2 超過date1的差距值,其結果值是一個帶有正負號的整數值。6、DATENAME

14、()DATENAME (<datepart>, <date>)以字符串的形式返回日期的指定部分此部分。由datepart 來指定。7、DATEPART()DATEPART (<datepart>, <date>)以整數值的形式返回日期的指定部分。此部分由datepart 來指定。DATEPART (dd, date) 等同于DAY (date)DATEPART (mm, date) 等同于MONTH (dat

15、e)DATEPART (yy, date) 等同于YEAR (date)8、GETDATE()以DATETIME 的缺省格式返回系統當前的日期和時間。9、Sql Server 中一個非常強大的日期格式化函數Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE(), 1): 05/16/06Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16Select

16、 CONVERT(varchar(100), GETDATE(), 3): 16/05/06Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06Select CONVERT(varchar(100), GETDATE(), 8): 1

17、0:57:46Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AMSelect CONVERT(varchar(100), GETDATE(), 10): 05-16-06Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16Select CONVERT(varchar(100), GETDATE(), 12): 060516Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:93

18、7Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AMSelect CONVERT(varchar(100), GETDATE(), 23):

19、2006-05-16Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE(), 101): 05/16/2006Select CONVERT(varchar(100), GETDATE(), 102): 200

20、6.05.16Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006Select CONVE

21、RT(varchar(100), GETDATE(), 108): 10:57:49Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AMSelect CONVERT(varchar(100), GETDATE(), 110): 05-16-2006Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16Select CONVERT(varchar(100), GETDATE(), 112): 20060516Select CONVERT(varcha

22、r(100), GETDATE(), 113): 16 05 2006 10:57:49:513Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:

23、57:49.827Select CONVERT(varchar(100), GETDATE(), 130): 18 ? ? 1427 10:57:49:907AMSelect CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM常用:Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47Select CONVERT(varchar(100), GETDATE(),

24、108): 10:57:49Select CONVERT(varchar(100), GETDATE(), 12): 060516Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16 八、統計函數 AVG ( ) -返回的平均價值 count( ) -返回的行數 first( ) -返回第一個值 last( ) -返回最后一個值 max( ) -返回的最大價值 min( ) -返回最小的價值 total( ) -返回的總和九、數學函數abs(numeric_expr)     

25、              求絕對值ceiling(numeric_expr)                取大于等于指定值的最小整數exp(float_expr)             

26、;         取指數floor(numeric_expr)                   小于等于指定值得最大整數pi()                 &

27、#160;                3.1415926.power(numeric_expr,power)            返回power次方       rand(int_expr)       

28、              隨機數產生器round(numeric_expr,int_expr)         安int_expr規定的精度四舍五入sign(int_expr)                 

29、0;    根據正數,0,負數,返回+1,0,-1sqrt(float_expr)                     平方根十、系統函數suser_name()       用戶登錄名user_name()        用戶在數據庫

30、中的名字user               用戶在數據庫中的名字show_role()        對當前用戶起作用的規則db_name()          數據庫名          

31、0;          object_name(obj_id) 數據庫對象名      col_name(obj_id,col_id) 列名        col_length(objname,colname)  列長度 valid_name(char_expr)     是否是有效標識符 十一、以上函數的部分實例1:replace 函數

32、第一個參數你的字符串,第二個參數你想替換的部分,第三個參數你要替換成什么select replace('lihan','a','b')                                   

33、;                               -lihbn(所影響的行數為 1 行)=2:substring函數第一個參數你的字符串,第二個是開始替換位置,第三個結束替換位置select substring('lihan',0,3);- li(所影響的行數為 1 行

34、)=3:charindex函數第一個參數你要查找的char,第二個參數你被查找的字符串 返回參數一在參數二的位置select  charindex('a','lihan')- 4(所影響的行數為 1 行)=4:ASCII函數返回字符表達式中最左側的字符的 ASCII 代碼值。select ASCII('lihan')- 108(所影響的行數為 1 行)=5:nchar函數根據 Unicode 標準的定義,返回具有指定的整數代碼的 Unicode 字符。參數是介于 0 與 65535 之間的正整數。如果指定了超出此范圍的值,將返回 NUL

35、L。select nchar(3213)- unicode字符(所影響的行數為 1 行)=6:soundex返回一個由四個字符組成的代碼 (SOUNDEX),用于評估兩個字符串的相似性。SELECT SOUNDEX ('lihan'), SOUNDEX ('lihon');- - L546  L542(所影響的行數為 1 行)=7:char參數為介于 0 和 255 之間的整數。如果該整數表達式不在此范圍內,將返回 NULL 值。SELECT char(125)- (所影響的行數為 1 行)=8:str函數第一個參數必須為數字,第二個參數表示轉化成ch

36、ar型占的位置,小于參數一位置返回*,大于右對齊SELECT str(12345,3)- *(所影響的行數為 1 行)SELECT str(12345,12)-        12345(所影響的行數為 1 行)=9:difference函數返回一個整數值,指示兩個字符表達式的 SOUNDEX 值之間的差異。返回的整數是 SOUNDEX 值中相同字符的個數。返回的值從 0 到 4 不等:0 表示幾乎不同或完全不同,4 表示幾乎相同或完全相同。SELECT difference('lihan','liha'

37、;)- 3(所影響的行數為 1 行)=10:stuff函數(四個參數)函數將字符串插入另一字符串。它在第一個字符串中從開始位置刪除指定長度的字符;然后將第二個字符串插入第一個字符串的開始位置。SELECT stuff('lihan',2,3,'lihan')- llihann(所影響的行數為 1 行)=11:left函數返回最左邊N個字符,由參數決定select left('lihan',4)- liha(所影響的行數為 1 行)=12 right函數返回最右邊N個字符,由參數決定select right('lihan',4)-

38、ihan(所影響的行數為 1 行)=13:replicate函數我的認為是把參數一復制參數二次select replicate('lihan',4)- lihanlihanlihanlihan(所影響的行數為 1 行)=14:len函數返回參數長度select len('lihan')- 5(所影響的行數為 1 行)=15:reverse函數反轉字符串select reverse('lihan')- nahil(所影響的行數為 1 行)=16:lower和upper函數參數大小寫轉化select lower(upper('lihan

39、9;)- lihan(所影響的行數為 1 行)=17:ltrim和rtrim函數刪除左邊空格和右面空格select ltrim('    lihan                 ')- lihan                

40、(所影響的行數為 1 行)select rtrim('    lihan')-     lihan(所影響的行數為 1 行) 追加:排名函數是SQL Server2005新加的功能。在SQL Server2005中有如下四個排名函數:1. row_number2. rank3. dense_rank4. ntile        下面分別介紹一下這四個排名函數的功能及用法。在介紹之前假設有一個t_table表,

41、表結構與表中的數據如圖1所示:圖1其中field1字段的類型是int,field2字段的類型是varchar一、row_number    row_number函數的用途是非常廣泛,這個函數的功能是為查詢出來的每一行記錄生成一個序號。row_number函數的用法如下面的SQL語句所示: select row_number() over(order by field1) as row_number,* from t_table    上面的SQL

42、語句的查詢結果如圖2所示。圖2    其中row_number列是由row_number函數生成的序號列。在使用row_number函數是要使用over子句選擇對某一列進行排序,然后才能生成序號。    實際上,row_number函數生成序號的基本原理是先使用over子句中的排序語句對記錄進行排序,然后按著這個順序生成序號。over子句中的order by子句與SQL語句中的order by子句沒有任何關系,這兩處的order by 可以完全不同,如下面的SQL語句所示: select row_number()&

43、#160;over(order by field2 desc) as row_number,* from t_table order by field1 desc    上面的SQL語句的查詢結果如圖3所示。圖3    我們可以使用row_number函數來實現查詢表中指定范圍的記錄,一般將其應用到Web應用程序的分頁功能上。下面的SQL語句可以查詢t_table表中第2條和第3條記錄: with t_rowtabl

44、eas(    select row_number() over(order by field1) as row_number,* from t_table)select * from t_rowtable where row_number>1 and row_number < 4 order by field1   

45、; 上面的SQL語句的查詢結果如圖4所示。圖4    上面的SQL語句使用了CTE,關于CTE的介紹將讀者參閱SQL Server2005雜談(1):使用公用表表達式(CTE)簡化嵌套SQL。    另外要注意的是,如果將row_number函數用于分頁處理,over子句中的order by 與排序記錄的order by 應相同,否則生成的序號可能不是有續的。    當然,不使用row_number函數也可以實現查詢指定范圍的記錄,就是比較麻煩。一般的方法是使用顛倒Top來實現,例如,查詢t_table表

46、中第2條和第3條記錄,可以先查出前3條記錄,然后將查詢出來的這三條記錄按倒序排序,再取前2條記錄,最后再將查出來的這2條記錄再按倒序排序,就是最終結果。SQL語句如下:  select * from (select top 2 * from( select top 3 * from t_table order by field1) a order by field1 desc)

47、 b order by field1                                           

48、0;                                                  

49、60;                 圖5     上面的SQL語句查詢出來的結果如圖5所示。     這個查詢結果除了沒有序號列row_number,其他的與圖4所示的查詢結果完全一樣。二、rank     rank函數考慮到了over子句中排序字段值相同的情況,為了更容易說明問題,在t_table表中再加一條記錄

50、,如圖6所示。                                                 

51、0;                                圖6     在圖6所示的記錄中后三條記錄的field1字段值是相同的。如果使用rank函數來生成序號,這3條記錄的序號是相同的,而第4條記錄會根據當前的記錄 數生成序號,后面的記錄

52、依此類推,也就是說,在這個例子中,第4條記錄的序號是4,而不是2。rank函數的使用方法與row_number函數完全相 同,SQL語句如下:  select rank() over(order by field1),* from t_table order by field1                  

53、60;                                                  &#

54、160;                                         圖7     上面的SQL語句的查詢結果如圖7所示。  三、

55、dense_rank    dense_rank函數的功能與rank函數類似,只是在生成序號時是連續的,而rank函數生成的序號有可能不連續。如上面的例子中如果使用dense_rank函數,第4條記錄的序號應該是2,而不是4。如下面的SQL語句所示:select dense_rank() over(order by field1),* from t_table order by field1    上面的SQL語句的查詢結果如圖8所示。圖8

56、60;   讀者可以比較圖7和圖8所示的查詢結果有什么不同四、ntile    ntile函數可以對序號進行分組處理。這就相當于將查詢出來的記錄集放到指定長度的數組中,每一個數組元素存放一定數量的記錄。ntile函數為每條記 錄生成的序號就是這條記錄所有的數組元素的索引(從1開始)。也可以將每一個分配記錄的數組元素稱為“桶”。ntile函數有一個參數,用來指定桶數。下 面的SQL語句使用ntile函數對t_table表進行了裝桶處理:select ntile(4) over(order by field1

57、) as bucket,* from t_table                                           &

58、#160;                                                              圖9     上

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論