![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=1739310643-ZhRgbeVPQLUeiQC3Lr7pG6WRTGEbrk2a-0-d9c791238e9c0c515cbe53f79ea61fff)
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=1739310643-dkXeFm8tdWTKNShvpakQ7O9HjnXB8kTc-0-eab3c0b2214ff658af02bbedc02aebac)
图6-1 ASCII()函数
字符's'的ASCII值为115,所以第一个和第二个返回结果相同。对于第三条语句中的纯数字的字符串,可以不使用单引号括起来。
6.2.2 CHAR()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P76_9733.jpg?sign=1739310643-GOqH0bhdvmPrEbkElYFPhhoeTyc6R8Go-0-79997f38782f746489f4da42f4a51d65)
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=1739310643-pkCtLRTDxr5GOjL911OZNYvQ1Pqm2pkw-0-9514712475a47a07bfd7367f78aeef01)
图6-2 CHAR()函数
可以看到,这里返回值与ASCII函数的返回值正好相反。
6.2.3 CHARINDEX()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P76_9732.jpg?sign=1739310643-hPfqTQSkSgpaT5vFkp3WCev1aqmBeXr8-0-511541020eab71e0303bec3e575a0cec)
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=1739310643-ufyFJ1ck0scazdHbK0bbJ63xiIcBRMd5-0-126a7552ba48d6207c25d2f6377e28ad)
执行结果如图6-3所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9784.jpg?sign=1739310643-hgaPJEx6innKaB4wbzVxQAxI82o6ylA2-0-e773774b037fa7caeb44a93bed4dd15b)
图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=1739310643-hcD7pxeoRMDMnlyJ8rHbTYgDIuhyGnKC-0-ff63692993f4296a102a7c9cf964df70)
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=1739310643-mkbUpK4HMWZpmwzD7s7StQ2M5a7U9aFn-0-87670db424b77773960c7e8a5b4042a4)
图6-4 LEFT()函数
函数返回字符串“football”左边开始的长度为4的子字符串,结果为“foot”。
6.2.5 RIGHT()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9804.jpg?sign=1739310643-amp6ECzoSsBt8zwWIKBaGQw42SO5wyEV-0-ca2446131d0d8e53763e4c253f922f0d)
与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=1739310643-VFYewkzOdkDx2iwK1XAMujgaJ8n9ppF8-0-67eefdbb20b889d699a0ce7c0d69b438)
图6-5 RIGHT()函数
函数返回字符串“football”右边开始的长度为4的子字符串,结果为“ball”。
6.2.6 LEN()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_9803.jpg?sign=1739310643-b7wIXaefm4grlujo1da24WJlBbEfSA78-0-1dec76a3a4f28c1f42969894abcfae4b)
返回字符表达式中的字符数。如果字符串中包含前导空格和尾随空格,则函数会将它们包含在计数内。LEN()对相同的单字节和双字节字符串返回相同的值。
【例6-6】使用LEN()函数计算字符串长度,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P77_37567.jpg?sign=1739310643-Fgk5JKYucjfW4FlagF0Hjzcvz67XIEvs-0-38db7c8a1ed519201d13a4e2ff133d31)
执行结果如图6-6所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9810.jpg?sign=1739310643-IrleMTRyfswdX6SNYr1dcbeCBp2VNNTo-0-7827f78cd54688b591dfdcae9f7ab2e6)
图6-6 LEN()函数
可以看到,LEN()函数在对待英文字符和汉字字符时,返回的字符串长度是相同的。一个汉字也算作一个字符。LEN()函数在处理纯数字时也将其当作字符串,但是使用纯数字时可以不使用引号。
6.2.7 LTRIM()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9867.jpg?sign=1739310643-Bs4fj3mVKpWQxdbCHRXuvVvRZapBsfSB-0-81f99627fa156d8d86143989f6eaf2ab)
LTRIM(character_expression)用于去除字符串左边多余的空格。字符数据表达式character_expression是一个字符串表达式,可以是常量、变量,也可以是字符字段或二进制数据列。
【例6-7】使用LTRIM()函数删除字符串左边的空格,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_37569.jpg?sign=1739310643-ZJ5oOGUouwWkkmjmlSfLngNv0D2UEIiO-0-f89a91ca6826ea43125fac76af61d291)
执行结果如图6-7所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9846.jpg?sign=1739310643-apYskUe5DurhvgLgCfFk4CloeHV8DSJG-0-416c736a1e6b2dfc7ddea9f35f6368fa)
图6-7 LTRIM()函数
对比两个值,LTRIM()只删除字符串左边的空格,右边的空格不会被删除,“ book ”删除左边空格之后的结果为“book ”。
6.2.8 RTRIM()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9866.jpg?sign=1739310643-mUnoiQca6AyaxVvi6ubh9qZK4dDU0g1c-0-2c1162025bb6add662a347caa09e8bd9)
RTRIM(character_expression)用于去除字符串右边多余的空格。字符数据表达式character_expression是一个字符串表达式,可以是常量、变量,也可以是字符字段或二进制数据列。
【例6-8】使用RTRIM()函数删除字符串右边的空格,输入语句如下:
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_37570.jpg?sign=1739310643-M6eazrzUMVvEZRBLbxA9aJdaP7WAr91S-0-7a043f13f3f200ab98ab3836892a7181)
执行结果如图6-8所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9854.jpg?sign=1739310643-xy60ooZMnL26agMZTaY9evCFE6VVX0Un-0-824272c1e5bb204d9777125db3f7c180)
图6-8 RTRIM()函数
对比两个值,RTRIM()只删除字符串右边的空格,左边的空格不会被删除,“ book ”删除右边空格之后的结果为“ book”。
6.2.9 LOWER()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P78_9865.jpg?sign=1739310643-JCgevdJxiS7k5ZaqxK7fO3106kYaNrW1-0-601e233b94fa51e4daf16a84260272ee)
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=1739310643-uRNrfsa9yxsgCxLW7DulAtNYRBNIN864-0-f4b04ec90655f65cab51eebdc41862fc)
图6-9 LOWER()函数
由结果可以看到,经过LOWER()函数转换之后,大写字母都变成了小写,小写字母保持不变。
6.2.10 UPPER()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9933.jpg?sign=1739310643-puWmIyIfVg3xbG5m53u982BdbS3pVNFm-0-4b735a4d830115958d4d8c9c16923d63)
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=1739310643-6fj7r0QUnZpqdNjsCiOiILCy7BIwNUkA-0-28d981acddf15d563b1f66c81a6205b1)
图6-10 UPPER()函数
由结果可以看到,经过UPPER()函数转换之后,小写字母都变成了大写,大写字母保持不变。
6.2.11 REPLACE()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9932.jpg?sign=1739310643-j6Z41BkSunZ0C623nocgnpc6GDWrCYPh-0-ded86867eabbe917bef71793ddf5f361)
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=1739310643-bhLYNjs3fOl7prt3jVZyouOltcNoSlJq-0-81a8bfbed05b4edbd510e6169fdc2879)
图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=1739310643-hUtb1JPQosR0s3oY6KSRLZtI42HkYRuM-0-5f8f5cb13456cc47c974418df8971c55)
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=1739310643-812mgjEEoVk5AFXBefrz6962aVZUv7TE-0-06e458f89ed58a11dbf904c28d92f746)
图6-12 REVERSE()函数
由结果可以看到,字符串“abc”经过REVERSE()函数处理之后,所有字符串顺序被反转,结果为“cba”。
6.2.13 STR()函数
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P79_9930.jpg?sign=1739310643-p20gtSL4hMuMsJOMdcpDn5Hypekm417c-0-b7aeddd091c97d1373156727365cb340)
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=1739310643-9g1bEuNhurb4D3jBVCOCWVFpVlvHOc4t-0-a891c9cccdb60173ffde9b89403eb443)
执行结果如图6-13所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P80_9937.jpg?sign=1739310643-KaGu6g9QK1udtqwBh4ynyodGHxQOIelI-0-cb16518242cc3eed76fa57fb6c0a0869)
图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=1739310643-xILTzGGiVUuYpKHYQ2IIThi09LRVxQ2h-0-63e7e8af69cfc92509f4f28ef616a704)
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=1739310643-Enp98pevRa6UdW4dNj6SRTHa1QjTWi5b-0-1ae0b9adadc14536d8c2bdbdd811efa7)
执行结果如图6-14所示。
![](https://epubservercos.yuewen.com/2AE60C/15477656704589106/epubprivate/OEBPS/Images/Figure-P80_9972.jpg?sign=1739310643-HKXUYBN8m1lVYZBpdPlAUaaaAlAKEYPF-0-2f9e6715fd2d8a52dab0e72a288fda7a)
图6-14 SUBSTRING()函数
第一条返回字符串从第一个位置开始长度为5的子字符串,结果为“break”。第二条语句返回整个字符串的后半段子字符串,结果为“akfast”。