原文:SQL点滴33—SQL中的字符串操作
计算字符串长度
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