![SQL Server 从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/709/27111709/b_27111709.jpg)
6.2 字符串函数
字符串函数用于对字符和二进制字符串进行各种操作,它们返回对字符数据进行操作时通常所需要的值。大多数字符串函数只能用于char、nchar、varchar和nvarchar数据类型,或隐式转换为上述数据类型。某些字符串函数还可用于binary和varbinary数据类型。字符串函数可以用在SELECT或者WHERE语句中。本节将介绍各种字符串函数的功能和用法。
6.2.1 ASCII()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P76_9734.jpg?sign=1738855941-oC5RmnrfXsTemLg7T6ogpRD6aTAJEcNL-0-5be78d3a78e8ab4e6d1cd6feee6e453d)
ASCII(character_expression)函数用于返回字符串表达式中最左侧字符的ASCII码值。参数character_expression必须是一个char或varchar类型的字符串表达式。
新建查询,运行下面的例子。
【例6-1】查看指定字符的ASCII值,输入语句如下:
SELECT ASCII('s'),ASCII('sql'), ASCII(1);
执行结果如图6-1所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P76_9721.jpg?sign=1738855941-eq41abISvAhMTyKccnh4T45MIj0G7BZN-0-ea4950f5cb555036faa07a971bdbb921)
图6-1 ASCII()函数
字符's'的ASCII值为115,所以第一个和第二个返回结果相同。对于第三条语句中的纯数字的字符串,可以不使用单引号括起来。
6.2.2 CHAR()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P76_9733.jpg?sign=1738855941-ZWtdcJ7sNK8g3WMbC8C78sM7MoIehL1d-0-a64a547053686721c794d72bba1e3650)
CHAR(integer_expression)函数将整数类型的ASCII值转换为对应的字符,integer_expression是一个介于0和255的整数。如果该整数表达式不在此范围内,将返回NULL值。
【例6-2】查看ASCII值115和49对应的字符,输入语句如下:
SELECT CHAR(115), CHAR(49);
执行结果如图6-2所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P76_9729.jpg?sign=1738855941-UD1B3cOoyibkJzty7Wt3lPBFPlGTpnBm-0-85ab587bc32a44442c270e64db97192c)
图6-2 CHAR()函数
可以看到,这里返回值与ASCII函数的返回值正好相反。
6.2.3 CHARINDEX()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P76_9732.jpg?sign=1738855941-JlfM9cf6cu8wWQqNcXMMcs7zs0poQrj4-0-e50e8d814b30803f15e73ef8307a5213)
CHARINDEX(str1,str,[start])函数返回子字符串str1在字符串str中的开始位置,start为搜索的开始位置。如果指定start参数,则从指定位置开始搜索;如果不指定start参数或者指定为0或者为负值,则从字符串开始位置搜索。
【例6-3】使用CHARINDEX()函数查找字符串中指定子字符串的开始位置,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_37564.jpg?sign=1738855941-QwPAONKn0VFKRzLr5n0yrEfXX4JtYupD-0-c73c4e602da66c95055695975b10f9a9)
执行结果如图6-3所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9784.jpg?sign=1738855941-8CGd1ez9I6VKWVRkiW7blJVLZP5HYIdo-0-4fb8753529fe69039490f5fcba3a46ff)
图6-3 CHARINDEX()函数
CHARINDEX('a','bananan')返回字符串'banana'中子字符串'a'第一次出现的位置,结果为2;CHARINDEX('a','banana',4)返回字符串'banana'中从第4个位置开始子字符串'a'的位置,结果为4;CHARINDEX('na', 'banana',4)返回从第4个位置开始子字符串'na'第一次出现的位置,结果为5。
6.2.4 LEFT()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9805.jpg?sign=1738855941-QXRcWlkVLiux1Vek16it4lcBt6uC8dqw-0-a458ee5279c6ab7d4da3417e1f8aa11b)
LEFT(character_expression, integer_expression)函数返回字符串左边开始指定个数的字符串、字符或二进制数据表达式。character_expression是字符串表达式,可以是常量、变量或字段。integer_expression为正整数,指定character_expression将返回的字符数。
【例6-4】使用LEFT()函数返回字符串中左边的字符,输入语句如下:
SELECT LEFT('football', 4);
执行结果如图6-4所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9792.jpg?sign=1738855941-3eD9Bky0PfDJiWMzVz5Lyg2ZaH3tx7Uv-0-154ea12b9eb93add37dd1bf688a781d3)
图6-4 LEFT()函数
函数返回字符串“football”左边开始的长度为4的子字符串,结果为“foot”。
6.2.5 RIGHT()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9804.jpg?sign=1738855941-6AtUTUlKeQlMJXbNfOr962mPEql0YSIJ-0-753bdbd8b62d9e447e931ce62c1928f6)
与LEFT()函数相反,RIGHT(character_expression,integer_expression)返回字符串character_expression最右边integer_expression个字符。
【例6-5】使用RIGHT()函数返回字符串中右边的字符,输入语句如下:
SELECT RIGHT('football', 4);
执行结果如图6-5所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9800.jpg?sign=1738855941-GYPkhJhEUfkH7DcpqtmDPZP553eDeAH4-0-7047dc6b5fae352aa5670542d6253717)
图6-5 RIGHT()函数
函数返回字符串“football”右边开始的长度为4的子字符串,结果为“ball”。
6.2.6 LEN()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9803.jpg?sign=1738855941-n81KOMB4tFS8CDJmNiEYUyOvDDzlbrBY-0-837110a51fe87b06ce68cf657acff41a)
返回字符表达式中的字符数。如果字符串中包含前导空格和尾随空格,则函数会将它们包含在计数内。LEN()对相同的单字节和双字节字符串返回相同的值。
【例6-6】使用LEN()函数计算字符串长度,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_37567.jpg?sign=1738855941-vKSL0YiJKxb6wAFfXmpNBzJCZIffQhmg-0-109d1c0e639be72b4ae62f72e3c5a21d)
执行结果如图6-6所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9810.jpg?sign=1738855941-xKefoLJtmtZInxvPHvf7QiZ82BHcvbv4-0-3306a9e752d0034c71975675c00034c5)
图6-6 LEN()函数
可以看到,LEN()函数在对待英文字符和汉字字符时,返回的字符串长度是相同的。一个汉字也算作一个字符。LEN()函数在处理纯数字时也将其当作字符串,但是使用纯数字时可以不使用引号。
6.2.7 LTRIM()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9867.jpg?sign=1738855941-LIjXRU9bBN5d7PUTAtlaOnU9xc5gwshL-0-04a80e6902185bc7609e26b373c7b7da)
LTRIM(character_expression)用于去除字符串左边多余的空格。字符数据表达式character_expression是一个字符串表达式,可以是常量、变量,也可以是字符字段或二进制数据列。
【例6-7】使用LTRIM()函数删除字符串左边的空格,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_37569.jpg?sign=1738855941-G5M2GmncG3yn7MB6NIkUW1pQSiEiu5Ob-0-0c0aaf3f4d7b5a7f1edb498fe5faeb18)
执行结果如图6-7所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9846.jpg?sign=1738855941-cOlJRBLUTIgEp4xI25WuVQZcmAjgxgnc-0-860981a04a554cc1f468588a9fa9f59a)
图6-7 LTRIM()函数
对比两个值,LTRIM()只删除字符串左边的空格,右边的空格不会被删除,“ book ”删除左边空格之后的结果为“book ”。
6.2.8 RTRIM()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9866.jpg?sign=1738855941-sSD18U7Ywcc4rOnbLbzDbFePZMrV62jn-0-51402c7378eb36a99decd27b421ec10a)
RTRIM(character_expression)用于去除字符串右边多余的空格。字符数据表达式character_expression是一个字符串表达式,可以是常量、变量,也可以是字符字段或二进制数据列。
【例6-8】使用RTRIM()函数删除字符串右边的空格,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_37570.jpg?sign=1738855941-mO4koANx9Dk4s3XVcbShhFvK0lCPWkNW-0-adc55b2435dc1fa4d7bd38f0f11d9582)
执行结果如图6-8所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9854.jpg?sign=1738855941-bGG0CcyryRXXA6TdTe85EogGqUslvoHw-0-0d77d62c05b9d091d1dc60c76c6b5044)
图6-8 RTRIM()函数
对比两个值,RTRIM()只删除字符串右边的空格,左边的空格不会被删除,“ book ”删除右边空格之后的结果为“ book”。
6.2.9 LOWER()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9865.jpg?sign=1738855941-lw3zppkQ13PxxQXF432v8wrGdLnVoagc-0-1c03bbd68d5e09309fd57661694da5f5)
LOWER(character_expression)将大写字符数据转换为小写字符数据后返回字符表达式。character_expression是指定要进行转换的字符串。
【例6-9】使用LOWER()函数将字符串中所有字母字符转换为小写,输入语句如下:
SELECT LOWER('BEAUTIFUL'), LOWER('Well');
执行结果如图6-9所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9862.jpg?sign=1738855941-T8JoBmJL53sZc9PfeMmE5ajvYAO9ayHl-0-f420aba70d56486fdccd272b9957fa8b)
图6-9 LOWER()函数
由结果可以看到,经过LOWER()函数转换之后,大写字母都变成了小写,小写字母保持不变。
6.2.10 UPPER()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9933.jpg?sign=1738855941-da2MJZgerRlBQ1CYpWOJYfcGMz4h4gxc-0-f9f3fac44edc5bc3292b1e8c17d54db8)
UPPER(character_expression)将小写字符数据转换为大写字符数据后返回字符表达式。character_expression是指定要进行转换的字符串。
【例6-10】使用UPPER()函数或者UCASE()函数将字符串中所有字母字符转换为大写,输入语句如下:
SELECT UPPER('black'), UPPER ('BLacK');
执行结果如图6-10所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9911.jpg?sign=1738855941-STQ7cJG4rxhS1tnO6mQUQuY6zzDCDA7x-0-fd499a9f3e34263f638d933ba2173845)
图6-10 UPPER()函数
由结果可以看到,经过UPPER()函数转换之后,小写字母都变成了大写,大写字母保持不变。
6.2.11 REPLACE()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9932.jpg?sign=1738855941-z8lKpz1OB7y5L0EHuUMPE59vbU2LJQMi-0-092468f8d747cc43af2ce759ff65297a)
REPLACE(s,s1,s2)使用字符串s2替代字符串s中所有的字符串s1。
【例6-11】使用REPLACE()函数进行字符串替代操作,输入语句如下:
SELECT REPLACE('xxx.sqlserver2016.com', 'x', 'w');
执行结果如图6-11所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9919.jpg?sign=1738855941-pMgnHyydStVCYUeh3Jh3MwSILzIV65ln-0-f84ce04c659c64ab12f74be44d949f50)
图6-11 REPLACE()函数
REPLACE('xxx.sqlserver2016.com','x','w')将“xxx.sqlserver2016.com”字符串中的'x'字符替换为'w'字符,结果为“www.sqlserver2016.com”。
6.2.12 REVERSE()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9931.jpg?sign=1738855941-QNI0mxiCdd9c3FO6zSxHxRnX9xUqZTBB-0-e89f318581d64b29f117238b9ae8eb6e)
REVERSE(s)将字符串s反转,返回的字符串的顺序和s字符顺序相反。
【例6-12】使用REVERSE()函数反转字符串,输入语句如下:
SELECT REVERSE('abc');
执行结果如图6-12所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9927.jpg?sign=1738855941-kT48wnfcqkDPMGhg106HF8vaGFAGtX7m-0-a71d4e90de0cf3879a64a1a28098b4c3)
图6-12 REVERSE()函数
由结果可以看到,字符串“abc”经过REVERSE()函数处理之后,所有字符串顺序被反转,结果为“cba”。
6.2.13 STR()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9930.jpg?sign=1738855941-UHZxLGRYJb6Ta6ogo3QFpzpQxqHVkuvh-0-481de5a47114c1a58fcd158e59bf06ed)
STR (float_expression [,length [,decimal]])函数用于将数值数据转换为字符数据。float_expression是一个带小数点的近似数字(float)数据类型的表达式。length表示总长度,它包括小数点、符号、数字以及空格,默认值为10。decimal指定小数点后的位数,必须小于或等于16,如果decimal大于16,则会截断结果,使其保持为小数点后有16位。
【例6-13】使用STR()函数将数字数据转换为字符数据,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_37576.jpg?sign=1738855941-WQcW8cEsaNBQ7uQNU0FMRGrolMAFCEf6-0-c9a1231ab5f0ecb39ecf18b7b2fe6945)
执行结果如图6-13所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P80_9937.jpg?sign=1738855941-8UeHpYi8Pb09GlCm4fWW2Y3kwv6px7MG-0-9d7e1e463f1c7ebe56b7fbe53ed6874b)
图6-13 STR()函数
第一条语句6个数字和一个小数点组成的数值3141.59转换为长度为6的字符串,数字的小数部分舍入为一个小数位。
第二条语句中表达式超出指定的总长度时,返回的字符串为指定长度的两个星号**。
6.2.14 SUBSTRING()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P80_37580.jpg?sign=1738855941-TxYiWdnLD7Ni3yg7eV9i9H5ObpEQ8tyh-0-1da9108f36161e648a46293a0e179f55)
SUBSTRING(value_expression, start_expression, length_expression)函数返回字符表达式、二进制表达式、文本表达式或图像表达式的一部分。
value_expression是character、binary、text、ntext或image表达式。
start_expression指定返回字符的起始位置的整数或表达式。如果start_expression小于0,会生成错误并中止语句。如果start_expression大于值表达式中的字符数,将返回一个零长度的表达式。
length_expression是正整数或指定要返回的value_expression的字符数的表达式。如果length_expression是负数,会生成错误并中止语句。如果start_expression与length_expression的总和大于value_expression中的字符数,则返回整个值表达式。
【例6-14】使用SUBSTRING()函数获取指定位置处的子字符串,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P80_37581.jpg?sign=1738855941-xmNqEMyIilsmX9dJEojwTDafoW98rrQN-0-d19f3a141f0e1b758cd499260712560a)
执行结果如图6-14所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P80_9972.jpg?sign=1738855941-QL3GLWrrCAGcFS7ynIvYwnnLdzGA6MCc-0-69d7ebc8c0c3ab52845d1e7dcd637ea7)
图6-14 SUBSTRING()函数
第一条返回字符串从第一个位置开始长度为5的子字符串,结果为“break”。第二条语句返回整个字符串的后半段子字符串,结果为“akfast”。