![0a790eb921ae014420824d18069dea59.png](https://img-blog.csdnimg.cn/img_convert/0a790eb921ae014420824d18069dea59.png)
字字珠玑的SQL如何言之凿凿?
上一篇文章我们大略介绍了在SQL中如何“绅士地“对待日期函数,今天就来讲讲对于文本数据的处理方式。
世界大同
相信处理过英文文本的朋友都知道大小写和空格的痛:
很多计算机语言在处理文本时不但要区分字母大小写,连一个小小的空格都不放过!
而今天,我们就先来看看如何一劳永逸地利用SQL解决检索时需要分辨大小写的问题:
upper(大写)将string(串)转换为大写:
UPPER
lower(小写)将string(串)转换为小写:
LOWER
string即为字符串,通常需要用单/双/三引号标注。具体使用哪种引号需具体问题具体分析,但很多情况下···
都是看心情【不
突然来介绍个在SQL中测试“新姿势”的小技巧:
使用SELECT语句。
大小写SELECT举例
虽然SELECT通常用来从表中检索数据,但通过省略FROM子句就可以简单地访问和处理表达式。来一起看个例子:
SELECT
![3825b04b3a36d670ecedc1a693c72c15.png](https://img-blog.csdnimg.cn/img_convert/3825b04b3a36d670ecedc1a693c72c15.png)
当然,这两个函数只适用于外文以解决大小写不统一的问题,对汉字是无效的:
SELECT
![e1ffe71da45c29a952ba05407264a076.png](https://img-blog.csdnimg.cn/img_convert/e1ffe71da45c29a952ba05407264a076.png)
万宗归一
不过不必觉得沮丧,SQL的不少文本函数也是支持汉字的【其实是支持string(串)】,比如将几个字符串拼接在一起:
CONCAT
Concat(拼接),可以拼接串:
CONCAT
简单的可以直接用SELECT语句测试:
SELECT
![711d80e789e948f903d7554334a0f4a8.png](https://img-blog.csdnimg.cn/img_convert/711d80e789e948f903d7554334a0f4a8.png)
但为什么不来皮一下建个表呢~
建个表
CREATE
![52a9fc7eafd2285b4297bfd230dc8a63.png](https://img-blog.csdnimg.cn/img_convert/52a9fc7eafd2285b4297bfd230dc8a63.png)
拼接举例
SELECT
![0a0ec648267afb2a299079c3618b8392.png](https://img-blog.csdnimg.cn/img_convert/0a0ec648267afb2a299079c3618b8392.png)
除去拼接,我们还可以在当前的表格中进行对文本数据的选择。
LEFT
Left(左)返回串左边选定多少的字符串:
LEFT
RIGHT
Right(右)返回串右边选定多少的字符串:
RIGHT
LENGTH
Length(长度)返回串的字节长度:
LENGTH
LOCATE
Locate(定位)找出串的一个子串。start(开始)是指开始搜索的位置,不是必填项,默认为
LOCATE
其中,substring为只想要检索的子串,string是原文本,start是位置(数字),留意空格也是算一个位置的。
这里还要啰嗦一句,SQL只会返回找到的第一个子串的位置,比如我们试图从“我是谁,我在哪儿,我要干什么?“中定位”我“。
SELECT
![1be3249c83c01b2e36b260f81fe1a86f.png](https://img-blog.csdnimg.cn/img_convert/1be3249c83c01b2e36b260f81fe1a86f.png)
但如果我们从第四个位置开始搜索的话:
SELECT
![ba72262f8ea35551d2dcfb8deba27aae.png](https://img-blog.csdnimg.cn/img_convert/ba72262f8ea35551d2dcfb8deba27aae.png)
就变成第五个了。
LTRIM
Ltrim(左,修剪)去掉串左边的空格:
LTRIM
RTRIM
Rtrim(右,修剪)去掉串右边的空格:
RTRIM
SUBSTRING
Substring(子,串)返回子串的字符。这里,length(长度)指的是想要提取出来的字节长度,不是必填项:
SUBSTRING
一鼓作气式举例
我们来看一下,根据刚才的表格“健身使人饥饿”,我们来如何:
- 返回状态栏自左向右的前两位字符;
- 测算想法栏的各项字节长度;
- 返回想法栏从第二个字符开始的子串。
SELECT
![d6f782c3f73b7062547a53aea26e6413.png](https://img-blog.csdnimg.cn/img_convert/d6f782c3f73b7062547a53aea26e6413.png)
大家可能会注意到,在计算想法栏的长度时,一个汉字算了三个字符长,遇到这个问题,我们可以用char_length(字符长度)来解决:
字符长度举例
SELECT
![9d66930b71ee05ae1229674248cff326.png](https://img-blog.csdnimg.cn/img_convert/9d66930b71ee05ae1229674248cff326.png)
似是而非
最后再来啰嗦个···似乎又是只有英文才能用的函数。
SOUNDEX。
它可以将任何文本串转换为描述其语音表示的字母数字模式。SOUNDEX考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较。虽然SOUNDEX不是SQL概念,但MySQL(就像多数DBMS一样)都提供对SOUNDEX的支持。
辨音举例
假如我们有这样一张表:
![ca99f56bd3a17df39732091988a7baf2.png](https://img-blog.csdnimg.cn/img_convert/ca99f56bd3a17df39732091988a7baf2.png)
此数据来源自网络。
再假如我并不确定"Y Lee"的发音,那么我就可以用似是而非的"Y Lie"来进行搜索:
SELECT
上述代码能匹配所有发音类似于Y.Lie的联系名:
![e28dd72c8b05b0cc87f05faf2fca5b11.png](https://img-blog.csdnimg.cn/img_convert/e28dd72c8b05b0cc87f05faf2fca5b11.png)
在这个例子中,WHERE子句使用Soundex()函数来转换cust_contact列值和搜索串为它们的SOUNDEX值。因为Y.Lee和 Y.Lie发音相似,所以它们的SOUNDEX值匹配,因此WHERE子句正确地过滤出了所需的数据。
小结
来总结一下今天所学的文本函数:
- Left( ) 返回串左边的字符
- Right( ) 返回串右边的字符
- Length( ) 返回串的长度
- Locate( ) 找出串的一个子串
- Lower( ) 将串转换为小写
- Upper( ) 将串转换为大写
- LTrim( ) 去掉串左边的字符
- RTrim( ) 去掉串右边的字符
- Soundex( ) 返回串的SOUNDEX值
- SubString( ) 返回子串的字符
希望上文可以帮助大家对SQL的文本函数有个初步的了解,如果还是有什么疑问或是建议的话,欢迎留言询问~
祝各位学习愉快!