SQL SERVER字符串函數

本篇文章仍是學習《程序員的SQL金典》內容的記錄,這次將講解的是SQL SERVER的字符串函數。程序員

其實數據庫跟程序語言庫同樣,都會集成不少可使用的API。這些API,若是你熟悉的話,將減小在代碼層次的再次加工操做。數據庫

我想字符串函數的使用價值仍是很高的,因此我以爲一邊學習一塊兒把經常使用的東西都記錄下來。一來加深本身的悟性,二來經過概括使知識爲我所用。數組

SQL SERVER支持的字符串函數(其它數據庫這裏就不羅列了,想看更多的能夠關注《程序員的SQL金典》),本文將介紹以下內容:函數

  • LEN(string)函數
  • LOWER(string)函數
  • UPPER (string)函數
  • LTRIM(string)函數
  • RTRIM (string)函數
  • SUBSTRING(string,start_position,length)函數
  • CHARINDEX(string,substring)函數
  • LEFT (string,length)函數
  • RIGHT (string,length) 函數
  • ASCII(string)函數
  • ASCII(string)函數

 

LEN(string)函數

 

此函數是用來計算一個字符串的長度,接受一個參數(能夠爲表裏面的一個字符串字段,也能夠爲別的)。這裏面,是沒有區分大小寫(下面的函數都同樣)。LEN,len,仍是Len都等同。例子以下:學習

SELECT FName, LEN(FName) FROM T_Person

注:若是給LEN函數傳遞的參數是一個時間字段的話,那麼返回的結果就不對,好比一個DateTime。因此呢,這個函數是用來計算字符串的長度,別的類型參數也能返回結果,可是就不必定正確。spa

I、若是傳進去的是NULL,那麼返回出來的仍是NULL。code

II、對於一個字符串形如' a a ',返回的結果是4,而不是5。即計算的結果不包括右側全爲空格字符串部分。blog

 

LOWER(string)函數

 

此函數是用來把一字符串都轉換爲小寫字符串。跟LEN()函數同樣,也接受一個參數。文檔

SELECT FName, LOWER(FName) FROM T_Person

注:若是傳進去的是NULL,那麼返回出來的仍是NULL。字符串

 

UPPER (string)函數

 

與LOWER()函數相反,此函數把字符串都轉換爲大寫字符串。也一樣接受一個參數。

SELECT FName, UPPER(FName) FROM T_Person

注:若是傳進去的是NULL,那麼返回出來的仍是NULL。

 

LTRIM(string)函數

 

此函數是去除字符串左邊的空格(對於夾在字符串裏面的空格則無能爲力)。也一樣接受一個參數。

SELECT FName,LTRIM(FName),LTRIM(' abc ') FROM T_Person

注:若是傳進去的是NULL,那麼返回出來的仍是NULL。

 

RTRIM (string)函數

 

此函數是去除字符串右邊的空格(對於夾在字符串裏面的空格則無能爲力)。也一樣接受一個參數。

SELECT FName,RTRIM(FName),RTRIM(' abc ') FROM T_Person

注:若是傳進去的是NULL,那麼返回出來的仍是NULL。

若是須要去除兩邊的空格(對於夾在字符串裏面的空格則無能爲力),則須要聯合來使用。

SELECT FName,LTRIM(RTRIM(FName)),LTRIM(RTRIM(' abc ')) FROM
T_Person

 

SUBSTRING(string,start_position,length)函數

 

此函數是使用來獲取子字符串。其中參數string爲主字符串,start_position爲子字符串在主字符串中的起始位置,length
爲子字符串的最大長度。須要注意的是這裏的start_position是從1開始,不一樣於數組是從0開始。若是給的是0的話,至關於取了一個''。

SELECT FName, SUBSTRING(FName,2,3) FROM T_Person

注:若是傳進去的是NULL,那麼返回出來的仍是NULL。

 

CHARINDEX(substring,string)函數

 

此函數是計算子字符串在主字符串中位置。其中參數substring爲子字符串,string爲主字符串。這個函數能夠檢測制定的子字符串是否存在於主字符串中,若是存在則還能夠返回所在的位置。假若有匹配的話,結果大於0。也就是匹配成功的話,至少從1開始。

SELECT FName,CHARINDEX('m', FName), CHARINDEX('ly', FName)
FROM T_Person

注:若是傳進去的是NULL,那麼返回出來的仍是NULL。

 

LEFT (string,length)函數

 

此函數是實現從左側開始取子字符串,其中參數string爲主字符串,length爲子字符串的最大長度。即取出來的結果是1至length範圍內的子字符串。

SELECT FName, LEFT(FName,3) , LEFT(FName,2)
FROM T_Person

注:若是傳進去的是NULL,那麼返回出來的仍是NULL。

這種方式等同於使用SUBSTRING(string,start_position,length)函數:

SELECT FName,SUBSTRING(FName, 1,3) FROM T_Person

 

RIGHT(string,length)函數

 

此函數是實現從右側開始取子字符串,其中參數string爲主字符串,length爲子字符串的最大長度。即取出來的結果是1至length範圍內的子字符串。

SELECT FName, RIGHT(FName,3) , RIGHT(FName,2)
FROM T_Person

注:若是傳進去的是NULL,那麼返回出來的仍是NULL。

這種方式等同於使用SUBSTRING(string,start_position,length)函數,其中SUBSTRING(string, LEN(string)- length+1, length)等價於RIGHT (string,length)。

SELECT FName, SUBSTRING(FName,LEN(FNAME)-2,3) , SUBSTRING(FName,LEN(FNAME)-1,2)
FROM T_Person

 

REPLACE(string,string_tobe_replace,string_to_replace)函數

 

此函數是實現字符串的替換功能,其中參數string 爲要進行替換操做的主字符串,參數string_tobe_replace 爲要被替換的字符串,即string_to_replace將替換string_tobe_replace全部出現的地方。 

select FName,REPLACE(FName,'i','e'),FIDNumber,
REPLACE(FIDNumber,'2345','abcd') FROM T_Person

藉助替換爲''來實現刪除字符串的功能:

SELECT FName, REPLACE(FName,'m','') ,FIDNumber,
REPLACE(FIDNumber,'123','') FROM T_Person

前面介紹過LTRIM(string)函數和RTRIM(string)函數,二者最終只能刪除兩側的空格,而對於在字符串裏面的空格,則無能爲力。而藉助於REPLACE函數則能夠輕鬆解決。

SELECT REPLACE(' abc 123 wpf',' ','') , REPLACE(' ccw enet wcf f',' ','')

 

ASCII(string)函數

 

此函數用來獲得一個字符的ASCII 碼,它有且只有一個參數,這個參數爲待求ASCII碼的字符,若是參數爲一個字符串則函數返回第一個字符的ASCII碼。

SELECT ASCII('a') , ASCII('abc')

注:若是傳進去的是NULL或者是'',那麼返回出來的是NULL。

 

CHAR(string)函數

 

CHAR(string)函數ASCII(string)函數相反,此函數用來獲得一個字符的ASCII 碼。

SELECT CHAR(56) , CHAR(90) ,'a', CHAR( ASCII('a') )

注:若是傳進去的是NULL,那麼返回出來的是NULL。

 

DIFFERENCE(string)函數

 

此函數用來比較兩個字符串的發音類似度,它能夠計算兩個字符串的發音特徵值,而且比較它們,而後返回一個0至4 之間的一個值來反映兩個字符串的發音類似度,這個值越大則表示兩個字符串發音類似度越大。

SELECT DIFFERENCE(FName,'Merry') FROM T_Person

注:若是傳進去的是NULL,那麼返回出來的是NULL。

 以上的SQL代碼都爲《程序員的SQL金典》(做者:楊中科)例子,書中的例子更詳細,又有相應的步驟查看結果。你們有興趣的話,能夠網上下載PDF文檔看,固然購買正版書也是不錯的選擇。至此本文完。

相關文章
相關標籤/搜索