本篇文章還是學習《程式設計師的sql金典》內容的記錄,此次將講解的是sql server的字串函式。
其實資料庫跟程式語言庫一樣,都會整合很多可以使用的api。這些api,如果你熟悉的話,將減少在**層次的再次加工操作。
我想字串函式的使用價值還是很高的,所以我覺得一邊學習一起把常用的東西都記錄下來。一來加深自己的悟性,二來通過歸納使知識為我所用。
len(string)函式
此函式是用來計算乙個字串的長度,接受乙個引數(可以為表裡面的乙個字串字段,也可以為別的)。這裡面,是沒有區分大小寫(下面的函式都一樣)。len,len,還是len都等同。例子如下:
select fname, len(fname) from t_person
注:如果給len函式傳遞的引數是乙個時間字段的話,那麼返回的結果就不對,比如乙個datetime。所以呢,這個函式是用來計算字串的長度,別的型別引數也能返回結果,但是就不一定正確。
i、如果傳進去的是null,那麼返回出來的還是null。
ii、對於乙個字串形如' a a ',返回的結果是4,而不是5。即計算的結果不包括右側全為空格字串部分。
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函式則可以輕鬆解決。
selectreplace('
abc 123 wpf
','','') , replace('
ccw enet wcf f
','','')
ascii(string)函式
此函式用來得到乙個字元的ascii 碼,它有且只有乙個引數,這個引數為待求ascii碼的字元,如果引數為乙個字串則函式返回第乙個字元的ascii碼。
selectascii('
a') , ascii('
abc')
注:如果傳進去的是null或者是'',那麼返回出來的是null。
char(string)函式
char(string)函式:與ascii(string)函式相反,此函式用來得到乙個字元的ascii 碼。
selectchar(56) , char(90) ,'
a', char( ascii('
a') )
注:如果傳進去的是null,那麼返回出來的是null。
difference(string)函式
此函式用來比較兩個字串的發音相似度,它可以計算兩個字串的發音特徵值,並且比較它們,然後返回乙個0至4 之間的乙個值來反映兩個字串的發音相似度,這個值越大則表示兩個字串發音相似度越大。
selectdifference(fname,'
merry
') from t_person
注:如果傳進去的是null,那麼返回出來的是null。
sqlserver 字串分割函式
create function split charstring nvarchar 4000 字串 separator char 1 分割符 returns tb temp table string nvarchar 4000 asbegin declare beginindex int,separ...
SQL Server 字串處理函式
函式 charindex expressiontofind expressiontosearch start location 功能 在乙個字串中搜尋指定的字元,返回發現指定的字元的位置 select charindex a abcdef 1 返回1 select charindex f abcde...
Sql Server系列 字串函式
字串函式用於對字元和二進位制字串進行各種操作,大多數字串函式只能作用於char nchar varchar和nvarchar資料型別。字串函式可以用在select或者where語句中。1.ascii 函式 ascii character expression 函式作用於返回字串表示式中最左側字元的a...