以下所有例子均Studnet表為例:
1. len():計算字符串長度
len()用來計算字符串的長度,每個中文漢字或英文字母都為一個長度
select sname, len(sname) from student
2. lower()、upper():字符串轉換為大、小寫
lower() 用來將一個字符串轉換為小寫,upper() 用來將一個字符串轉換為大寫
select lower('I AM A STUDENT !')
select upper('i am a student !')
3. ltrim()、rtrim():截去字符串左、右側空格
ltrim():用來將一個字符串左側的空格去掉,rtrim()用來將一個字符串右側的空格去掉
declare @str varchar(100);
set @str=' 我的左側有空格!';
select @str as 初始字符, len(@str) as 初始長度, ltrim(@str) as 現有字符, len(ltrim(@str)) as 現有長度;
返回結果:初始長度分別為9和8
4. space():返回由重復的空格組成的字符串
space(integer_expression):integer_expression 指示空格個數的正整數。如果 integer_expression 為負,則返回空字符串。
select 'A'+ space(2)+'B' /* 結果: 'A B' */
5. substring()、left()、right():取子字符串
-
substring(string, start_position, length):可以從任意位置取任意長度的子字符串,
-
left(string, length):從左側開始取子字符串
-
right(string, length):從右側開始取子字符串
select substring('HelloWorld!', 6, 6) /* 結果:World */
select left('HelloWorld!', 5) /* 結果:Hello */
select right('HelloWorld!', 6) /* 結果:oWorld */
6. replace():字符串替換
replace(string, 要被替換的字符串, 替換的字符串)
select replace('HelloWorld!','o','e') /* 結果為:HelleWerld! */
7. reverse():返回字符串值的逆向值
reverse(string_expression)
select reverse('abc') /* 結果為:cba*/
8. stuff():刪除指定長度的字符,並在指定的起點處插入另一組字符
stuff(character_expression, start, length, character_expression) start:整數,指定刪除和插入的開始位置。 length:整數,指定要刪除的字符數。
select stuff('abcdefgf', 2, 6, 'Hello-') /* 結果為:aHello-f */
select stuff('abcdefgf', 2, 6, 'Hello') /* 結果為:aHellof */
9. replicate():以指定的次數重復字符串值
replicate(string_expression ,integer_expression)
select replicate('abc', 4) /* 結果為:abcabcabcabc */
10. charindex():返回字符串中指定表達式的開始位置
charindex(expression1 ,expression2 , start_location )或charindex(expression1 ,expression2 )
expression1在expression2 中的開始位置
select charindex('H','elloHWorldHabc') /* 結果為:5 */
11. patindex():返回指定“表達式中模式”第一次出現的開始位置
patindex('%pattern%', expression):返回指定“表達式中某模式”第一次出現的起始位置; 如果在全部有效的文本和字符數據類型中沒有找到該模式,則返回零。
select patindex('%Hello%','WorldHello') 結果為:6
12. unicode():返回輸入表達式的第一個字符的整數值
unicode('ncharacter_expression'):'ncharacter_expression' 為 nchar 或 nvarchar 表達式。
select unicode('a') /* 結果為:97 */
select unicode('abc') /* 結果為:97 */
13. str():返回由數字數據轉換來的字符數據
str(float_expression, length ,decimal ) float_expression:帶小數點的近似數字 (float) 數據類型的表達式。 length:總長度。它包括小數點、符號、數字以及空格。默認值為 10。 * decimal:小數點右邊的小數位數。decimal 必須小於等於 16。如果 decimal 大於 16,則將結果截斷為小數點右邊的 16 位。
select str(1234.436, 3) /* 結果為:'**';當表達式超出指定長度時返回'**' */
select len(str(1234.436, 3)) /* 結果為:3 */
select str(123.436), len(str(123.436)) /* 結果為:'123', 10 */
select str(123.436, 6), len(str(123.436, 6)) /* 結果為:'123', 6 */
select str(123.436, 6, 1), len(str(123.436,6, 1)) /* 結果為:'123.4', 6 */
14. ascii():得到字符的ASCII碼
ascii():用來得到一個字符的ASCII碼,它有且只有一個參數,如果參數為字符串,那么取第一個字符的ASCII碼
select ascii('H') /* 結果為:72 */
select ascii('HelloWorld!') /* 結果為:72 */
15. Char():得到一個與ASCII碼數字對應的字符
Char(integer_expression):integer_expression 介於 0 和 255 之間的整數。如果該整數表達式不在此范圍內,將返回 NULL 值。
select Char(72) /* 結果為:H */
16. nchar():返回返回具有指定的整數代碼的 Unicode 字符
nchar(integer_expression) integer_expression 介於 0 與 65535 之間的正整數。如果指定了超出此范圍的值,將返回 NULL。
select nchar(20013) /* 結果為:'中' */
select NCHAR(72) /* 結果為:'H' */
17. quotename() 轉義
18. soundex():發音匹配度
有時候我們並不知道一個人姓名的拼寫,但是我們知道他的發音,這時我們可以進行發音的匹配度測試。 soundex():用於計算一個字符串的發音特征性,這個特征值為一個四個字符的字符串,特征性的第一個字符總是初始字符串中的第一個字符,而后是一個三位數的數值。
select sname, soundex(sname) from student
結果為:
發音特征值的含義非常復雜,如果要根據兩個發音特征值來分析兩個字符串的發音相似度的話非常麻煩。
可以使用difference()來簡化兩個字符串的發音相似度比較,它可以計算兩個字符串的發音特征值,並且比較它們,然后返回一個0~4之間的值來反映兩個字符串的發音相似度,這個值越大則表示兩個字符串的發音相似度越大。
select sname, soundex(sname), difference(sname,'Herry') from stu
結果為:
本文轉自《SQL Server之字符串函數》,並稍作修改。