1. 程式人生 > >轉載:SQL 字符串操作函數

轉載:SQL 字符串操作函數

替換 abc logs bcd ring 小寫 cnblogs 重復字符 null

http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html

以下所有例子均Studnet表為例:
技術分享

計算字符串長度
len()用來計算字符串的長度

select sname ,len(sname) from student

字符串轉換為大、小寫
lower() 用來將一個字符串轉換為小寫,upper() 用來將一個字符串轉換為大寫

select lower(‘I AM A STUDENT !‘)
select upper(‘i am a student !‘)

截去字符串左、右側空格
ltrim() 用來將一個字符串左側的空格去掉 ,rtrim()用來將一個字符串右側的空格去掉

declare @str varchar(100)
set @str=‘ 我的左側有空格!‘
select @str as 初始字符, len(@str) as 初始長度,ltrim(@str) as 現有字符,len(ltrim(@str)) as 現有長度

返回由重復的空格組成的字符串
space(integer_expression) integer_expression 指示空格個數的正整數。如果 integer_expression 為負,則返回空字符串。

select ‘A‘+ space(2)+‘B‘

取子字符串
substring(string,start_position,length) 可以從任意位置取任意長度的子字符串,
left(string,length) 從左側開始取子字符串
right(string,length)從右側開始取子字符串

select substring(‘HelloWorld!‘,6,6)
select left(‘HelloWorld!‘ ,5)
select right(‘HelloWorld!‘ ,6)

字符串替換
replace(string,要被替換的字符串,替換的字符串)

select replace(‘HelloWorld!‘,‘o‘,‘e‘) 結果為:HelleWerld!

返回字符串值的逆向值
reverse(string_expression)

select reverse(‘abc‘) 結果為:cba

刪除指定長度的字符,並在指定的起點處插入另一組字符
stuff(character_expression , start , length ,character_expression)
start 一個整數值,指定刪除和插入的開始位置。
length 一個整數,指定要刪除的字符數。

select stuff(‘abcdefg‘,1,6,‘Hello ‘) 結果為:Hello g

以指定的次數重復字符串值
replicate(string_expression ,integer_expression)

select replicate(abc,4) 結果為:abcabcabcabc

返回字符串中指定表達式的開始位置
charindex(expression1 ,expression2 , start_location )或charindex(expression1 ,expression2 )
expression1在expression2 中的開始位置

select charindex(‘H‘,‘elloHWorld‘) 結果為:5

返回指定表達式中模式第一次出現的開始位置
patindex(‘%pattern%‘,expression) 返回指定表達式中某模式第一次出現的起始位置;
如果在全部有效的文本和字符數據類型中沒有找到該模式,則返回零。

select patindex(‘%Hello%‘,‘WorldHello‘) 結果為:6

返回輸入表達式的第一個字符的整數值
unicode( ‘ncharacter_expression‘ ) ncharacter_expression 為 nchar 或 nvarchar 表達式。

select unicode(‘a‘) 結果為:97
select unicode(‘abc‘) 結果為:97

返回由數字數據轉換來的字符數據
str(float_expression , length ,decimal )
float_expression 帶小數點的近似數字 (float) 數據類型的表達式。
length 總長度。它包括小數點、符號、數字以及空格。默認值為 10。
decimal 小數點右邊的小數位數。decimal 必須小於等於 16。如果 decimal 大於 16,則將結果截斷為小數點右邊的 16 位。

技術分享 select str(123.436,2), len(str(123.436,2)) //當表達式超出指定長度時,字符串為指定長度返回 **

select str(123.436), len(str(123.436)),
str(123.436,6), len(str(123.436,6)),
str(123.436,6,1), len(str(123.436,6,1)) //由六個數字和一個小數點組成的表達式轉換為有六個位置的字符串。
數字的小數部分舍入為一個小數位。
select str(1234.436), len(str(1234.436)),
str(1234.436,6), len(str(1234.436,6)),
str(1234.436,6,1),len(str(1234.436,6,1))
技術分享

結果為:技術分享

技術分享

技術分享

得到字符的ASCII碼
ascii()用來得到一個字符的ASCII碼,它有且只有一個參數,如果參數為字符串,那麽取第一個字符的ASCII碼

select ascii(‘H‘)
select ascii(‘HelloWorld!‘)

得到一個與ASCII碼數字對應的字符
Char(integer_expression) integer_expression 介於 0 和 255 之間的整數。如果該整數表達式不在此範圍內,將返回 NULL 值。

select Char(72)

返回返回具有指定的整數代碼的 Unicode 字符
nchar(integer_expression) integer_expression 介於 0 與 65535 之間的正整數。如果指定了超出此範圍的值,將返回 NULL。

select nchar(1000)

返回帶有分隔符的 Unicode 字符串,分隔符的加入可使輸入的字符串成為有效的 SQL Server 分隔標識符。
quotename(‘character_string‘) character_string 不得超過 128 個字符。超過 128 個字符的輸入將返回 NULL。

select quotename(‘abc[aa]def‘)

結果為:[abc[]]def] 請註意,字符串 abc[]def 中的右方括號有兩個,用於指示轉義符。
select QUOTENAME(‘abcdef‘,‘‘‘‘) --分隔符是兩個單引號
-- ‘abcdef‘
select QUOTENAME(‘abcdef‘) --分隔符是]
-- [abcdef]
select QUOTENAME(‘abcdef‘,‘{}‘) --分隔符是}
-- {abcdef}

發音匹配度
有時候我們並不知道一個人姓名的拼寫,但是我們知道他的發音,這時我們可以進行發音的匹配度測試。
soundex()用於計算一個字符串的發音特征性,這個特征值為一個四個字符的字符串,特征性的第一個字符總是初始字符串中的第一個字符,而後是一個三位數的數值。

select sname ,soundex(sname) from student

結果為:

技術分享

發音特征值的含義非常復雜,如果要根據兩個發音特征值來分析兩個字符串的發音相似度的話非常麻煩。
可以使用difference()來簡化兩個字符串的發音相似度比較,它可以計算兩個字符串的發音特征值,並且比較它們,
然後返回一個0~4之間的值來反映兩個字符串的發音相似度,這個值越大則表示兩個字符串的發音相似度越大。

select sname,soundex(sname), difference(sname,‘Herry‘) from stu

結果為:
技術分享

轉載:SQL 字符串操作函數