![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=1739155356-IVD5iA6G69mxwpMpAFM1JS4FADJPIQ9m-0-2c00c2d2ee14976c757dfcc2900135f3)
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=1739155356-u8pNpVGBbS3WJ1zrLUVvb0dMo7AX7yTF-0-1e62f98ed02107ac59243a0e6f2fe797)
图6-1 ASCII()函数
字符's'的ASCII值为115,所以第一个和第二个返回结果相同。对于第三条语句中的纯数字的字符串,可以不使用单引号括起来。
6.2.2 CHAR()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P76_9733.jpg?sign=1739155356-8p2KymTMPbrWPUV0M5wDdZDAgLop9qT0-0-e21d2c3147292d6e59433cfcda43e1e7)
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=1739155356-negO8evsKswc2SOcgQJqC5bwvIYSCJ8J-0-5236f74f6dd520a61ade39901241b40f)
图6-2 CHAR()函数
可以看到,这里返回值与ASCII函数的返回值正好相反。
6.2.3 CHARINDEX()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P76_9732.jpg?sign=1739155356-rzOjVrgdSsSLZlEfFMXc6EdBeJDZmiDv-0-4db6bc12fc1ea4de1beef2b54ff329ec)
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=1739155356-3NpIUAm6htZRoXzqDb4KtgWelVZPXIVI-0-1805bd3959cf18e17efcd645c51b8b5d)
执行结果如图6-3所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9784.jpg?sign=1739155356-n2LUu6faPsa5k3ZCmAC1lNojFi6xjaNH-0-7e209cfbad38a93569786ee0186187df)
图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=1739155356-IZJP6eOrniWqt3Wnx87K7rY1oBXdRHoN-0-8e16cb65d6c0f14fb07dc7a006725bb1)
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=1739155356-VQbnmN1bAqx8vdE7CuOZqoTrewe55FkO-0-fe08a0d4656c6bb7831e60ac07ac3a0a)
图6-4 LEFT()函数
函数返回字符串“football”左边开始的长度为4的子字符串,结果为“foot”。
6.2.5 RIGHT()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9804.jpg?sign=1739155356-qXPjjuqyBjKMeZO8hXJBuCi7gl6HjCcU-0-09595fda0775d06708abf7308bfa1255)
与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=1739155356-a04o8LpSUiTKF8XRkc2LbLR0AZCLYKgZ-0-43a98b191653a8c472745ea0e6f0a9a2)
图6-5 RIGHT()函数
函数返回字符串“football”右边开始的长度为4的子字符串,结果为“ball”。
6.2.6 LEN()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9803.jpg?sign=1739155356-VLFY5psJDou0Ja4dcarWQlZhamBGgBsi-0-26d203b9c6778c4318997d8132ad5fb5)
返回字符表达式中的字符数。如果字符串中包含前导空格和尾随空格,则函数会将它们包含在计数内。LEN()对相同的单字节和双字节字符串返回相同的值。
【例6-6】使用LEN()函数计算字符串长度,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_37567.jpg?sign=1739155356-C7TRQQdRMDfeXiJGXz3FGtpyNCsIMsBP-0-005fb0d0f0dd3a23c7716d98948b28aa)
执行结果如图6-6所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9810.jpg?sign=1739155356-T4yl1zmYyW2xjZ3BN05TS3Z6axKzxLBZ-0-55e85c99f3c42588e3185f6c23a113ff)
图6-6 LEN()函数
可以看到,LEN()函数在对待英文字符和汉字字符时,返回的字符串长度是相同的。一个汉字也算作一个字符。LEN()函数在处理纯数字时也将其当作字符串,但是使用纯数字时可以不使用引号。
6.2.7 LTRIM()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9867.jpg?sign=1739155356-HsT2ONc0oxGILAQikH7Yotny9Vq7yuxi-0-bba6def91e2d67a8fc7698d16e5d7b01)
LTRIM(character_expression)用于去除字符串左边多余的空格。字符数据表达式character_expression是一个字符串表达式,可以是常量、变量,也可以是字符字段或二进制数据列。
【例6-7】使用LTRIM()函数删除字符串左边的空格,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_37569.jpg?sign=1739155356-Tyb0A0FgggtZ3al6ES2apzcC28Ld1u7P-0-2a844b2e8a05738747d25619104afba5)
执行结果如图6-7所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9846.jpg?sign=1739155356-k4tGv8TRmsmX8IWbG0WFYDJnHuYC1bjr-0-5b79aa0bd4d1d4444aaa18f79a22569f)
图6-7 LTRIM()函数
对比两个值,LTRIM()只删除字符串左边的空格,右边的空格不会被删除,“ book ”删除左边空格之后的结果为“book ”。
6.2.8 RTRIM()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9866.jpg?sign=1739155356-I6HJhWvN1PF4WxXD9sFvjtuQEwQ7sIWE-0-ca568c6c3898b6f6e8d6c6e310bfdf31)
RTRIM(character_expression)用于去除字符串右边多余的空格。字符数据表达式character_expression是一个字符串表达式,可以是常量、变量,也可以是字符字段或二进制数据列。
【例6-8】使用RTRIM()函数删除字符串右边的空格,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_37570.jpg?sign=1739155356-gfYaYUM8MjuXc2LgOCnU4H823klh5HgI-0-16e5f8f3d68d3351e1633b5630fe49bc)
执行结果如图6-8所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9854.jpg?sign=1739155356-JZVLOzXZZYM9biw1TREsbdXB2AqhwGAH-0-d64e2d21562f401b12a651038a2dd818)
图6-8 RTRIM()函数
对比两个值,RTRIM()只删除字符串右边的空格,左边的空格不会被删除,“ book ”删除右边空格之后的结果为“ book”。
6.2.9 LOWER()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9865.jpg?sign=1739155356-sd9GeGA8Dv5jvOZgGumxRoyUhD2Wqpc1-0-2eb6f7be735f0472d9a9f6170950168e)
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=1739155356-49nEgo05WXdS2cEqCKN6kKT4xtbtHEQn-0-52472ab1b5e7f5fbc0f2a9743eed9469)
图6-9 LOWER()函数
由结果可以看到,经过LOWER()函数转换之后,大写字母都变成了小写,小写字母保持不变。
6.2.10 UPPER()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9933.jpg?sign=1739155356-HgmfsgGFrO8bZPj2ZraW0crsCb6Pn9ut-0-0c80ac6fd4adba2de8c7ce32e218f1b6)
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=1739155356-kF7iDHjcl43OBMOswNYjtnFmKNJ3zDi2-0-b56d364bb9873c8db9cf13d61a64c8e0)
图6-10 UPPER()函数
由结果可以看到,经过UPPER()函数转换之后,小写字母都变成了大写,大写字母保持不变。
6.2.11 REPLACE()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9932.jpg?sign=1739155356-v0pRMQ1LCOKJqvKFfTmhQD4EEHTo7KpE-0-b953527f6e282c031d04820364b71adb)
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=1739155356-yRSc6g2YBQsvHcFeBrSA4kZmv14kgjz9-0-ffe632ad378b51caa92d1c56aa50067f)
图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=1739155356-4YwVas3T24Qe8Bia94qghUGCRKbImdiK-0-c8ca90252744befb7c7d8606a440e803)
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=1739155356-rc5Pa81DWc8qwGOZwxeUur7oj9y2KFK2-0-118733c0b3e0e514d6219dc126699e49)
图6-12 REVERSE()函数
由结果可以看到,字符串“abc”经过REVERSE()函数处理之后,所有字符串顺序被反转,结果为“cba”。
6.2.13 STR()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9930.jpg?sign=1739155356-xyOdEuuSoLY3Cbq9EmsXsYXpBdaIOZyI-0-8855e90d436addddbbb0e120a22dcf0c)
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=1739155356-i2SvC7NJcimMY4PsKYuhM4ITwCnBAM7Y-0-426b71fe516eebeb551850584e1c9a8d)
执行结果如图6-13所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P80_9937.jpg?sign=1739155356-uK64FCUbIOv2ZscV1L9l3B6CU4dQ1DPy-0-fcdc361d7cb0f7d2d6025cf69cd12485)
图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=1739155356-eEl9JNYX6WkmE2jbfZxcyJUZHDQBcBLL-0-621f44114dacaec9804ee987490f2756)
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=1739155356-zhd8QlTNuhkPDFi71kMjyxCjuCLkiiax-0-08ec91751ccf3a834ee71e1afd552a26)
执行结果如图6-14所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P80_9972.jpg?sign=1739155356-aKjJttqdTVhKBrR9qH3h1ifphhJnT7op-0-1b6ad708028780c6555691a69d083477)
图6-14 SUBSTRING()函数
第一条返回字符串从第一个位置开始长度为5的子字符串,结果为“break”。第二条语句返回整个字符串的后半段子字符串,结果为“akfast”。