13.字符串函数
1.计算字符串长度:Len()
select len('Saber ')--结果为5,意味字符后面的空白不计数?
select len('Saber')--结果:5
SELECT FName, len(FName) FROM T_Person
2.字符串转换为小写:Lower()
select lower('Saber')--结果:saber
3.字符串转换为大写:Upper()
select upper('Saber')--结果:SABER
4.截去字符串左侧空格:Ltrim()
select ltrim(' Saber')--结果:saber
5.截去字符串右侧空格:Rtrim()
select rtrim('Saber ')
6.计算子字符串的位置:CharIndex()
SQL中提供了计算子字符串在主字符串中位置的函数,这个函数可以检测制定的子字符串是否存在于主字符串中,如果存在则还可以返回所在的位置。 CharIndex(substring,string),其中参数substring为待查询的子字符串,参数string为主字符串。
select charindex('er','Saber')--结果:4
7.从左侧开始取子字符串:Left()
要从左侧开始取子字符串,这样指定主字符串和要取的长度就可以了。
select left('SaberLover',5)--结果:Saber
8.从右侧开始取子字符串:Right()
select right('SaberLover',5)--结果:Lover
9.SubString()
使用SubString()函数我们可以从任意位置开始取任意长度的子字符串。
select substring('SaberLover',3,3),--结果:ber substring('SaberLover',3,10),--结果:berLover substring('SaberLover',1,len('SaberLover')),--结果:SaberLover substring('SaberLover',-4,len('SaberLover'))--结果:Saber
10.字符串替换:Replace()
select replace('SaberLover','Lover','')--结果Saber
select replace(' ccw enet wcf f',' ','') --结果ccwenetwcff
11.得到字符的ASCII码:Ascii()
ASCII()函数用来得到一个字符的ASCII 码,它有且只有一个参数,这个参数为待求ASCII码的字符,如果参数为一个字符串则函数返回第一个字符的ASCII码。
select ascii('a') as a,ascii('0') as zero,ascii('a0') as azero
12.得到一个ASCII码数字对应的字符:Char()
select char(90)--结果Z
13.发音匹配度:Soundex(),Difference()
Soundex()函数用于计算一个字符串的发音特征值,这个特征值为一个四个字符的字符串,特征值的第一个字符总是初始字符串中的第一个字符,而其后则是一个三位数字的数值。
select soundex('jack'),soundex('jeck'),soundex('joke'),soundex('juke')
发音特征值的含义非常复杂,如果要根据两个发音特征值来分析两个字符串的发音相似度的话非常麻烦。Difference()用来简化两个字符串的发音相似度比较,它可以计算两个字符串的发音特征值,并且比较它们,然后返回一个0至4之间的一个值来反映两个字符串的发音相似度,这个值越大则表示两个字符串发音相似度越大。
select difference('Kerry','Merry')--结果:3
SELECT * FROM T_Person WHERE difference(FName,'Tim')>=3
14.计算字符在字符串中出现的次数
要求计算字符“r”在每个员工名字中出现的次数。 SQL中并没有提供计算字符在字符串中出现的次数的函数,不过可以通过下面的思路来等价实现:首先计算FName的长度,然后将FName中的所有“r”删掉,计算删掉“r”以后的FName的长度,这两个长度之差就是字符“r”在FName中出现的次数。
SELECT FName, LEN(FName) - LEN( REPLACE(FName,'r','') ) FROM T_Person
注:使用字符串函数处理变量的时候要指定字符串的长度。