我们都知道,日常生活中使用得最多的就是字符串,比方说打招呼‘你好’,聊天交流等。在数据表中也有许多的字符串数据存在,比方说用户名等,但是字符串函数不仅能够处理字符串数据,其他的数据也能够处理,如整型数据等。现在就让我们去认识字符串函数的相应用法,及其为我们处理数据时带来的便利与作用。
目录
ascii函数
upper函数(ucase函数)
lower函数(lcase函数)
编辑lpad函数
rpad函数
concat函数
自连接
内连接
concat_ws函数
left函数
right函数
insert函数
replace函数
char_length函数
length函数
trim函数
trim(str)
ltrim(str)
rtrim(str)
trim(s from str)
trim(leading s from str)方法
trim(trailing s from str)方法
repeat函数
space函数
strcmp函数
substr函数
locate函数
elt函数
field函数
find_in_set函数
reverse函数
nullif函数
ASCII函数主要用于将我们输入的字母转换成ASCII表中对应的ASCII码值,如a的ASCII码值为97,A的ASCII码值为65。如果我们输入的不是一个字母,而是一串字符串时,这个时候ASCII函数就会选取开头的第一个字母来返回该字母对应的ASCII码值:
upper(ucase)函数用于将我们输入的字符全部转换成大写字母:
lower函数为小写字母函数,可以将我们输入凡是大写的字符都转换成小写字母:
lpad函数为left pad的缩写。
pad有填充,衬垫的意思,所以lpad就是向左填充,因此lapd函数也叫右对齐函数---不能因为lpad里面有left就误以为是左对齐函数,而是从该函数的翻译处去记忆,向左填充就意味着我们的函数可以使我们的字符向右对齐,左边不够的地方用字符进行填充。
我们的lpad函数需要传入三个参数,lpad(str,length,pad)---表示我们的str在向右对齐时总长为length,当我们的str长度不足length时,左边就需要使用pad字符进行填充:
select name,sex, lpad(wages,5,'*') from containnull;
如上我们想要查找工资在5位数的人,如果没有五位数的工资的话那么可以在工资前面补‘*’,缺几位数就填充几个‘*’。
rpad函数与lpad函数相反,为向左对齐函数,如果缺少相应的位数的话可以在右边补上字符:
select name,sex, rpad(wages,5,'*') from containnull;
concat翻译为函数的意思,可以用于select查询语句时连接我们的查询,需要我们传入两个及两个以上的参数。
现在我们有一张表---表里面为《西游记》主要人物,现在我们想要查询出“×××受雇与×××”的数据,如:“唐僧受雇于如来佛祖”,“孙悟空受雇于唐僧”等,我们可以使用自连接,也可以使用内连接来实现。
如下:
select concat(e.emp_name,'受雇于',m.emp_name) from employee as e,employee as m where e.manager_id=m.emp_id;
要使用内连接就需要使用到inner join table on 条件。如下:
select concat(e.emp_name,'受雇于',m.emp_name) from employee as e join employee as m on e.manager_id=m.emp_id;
concat_ws函数与concat函数类似,但是有一点不同,就是concat_ws函数可以指定连接的字符,之前我们的concat函数只是简单的将我们写入的字符连接起来,如果我们想要连接的字符都是用特定的连接符连接,那么我们就可以使用concat_ws函数:
如上,两个sql语句实现的效果一样。
使用left函数可以让我们选取指定字段下数据的左边前几位数据内容。left函数需要传入两个参数
left(str,len)
right和left函数作用相反,right函数获取的是右边的数据内容:
insert函数为插入函数,可以在字符串指定的索引位置开始到长度为len的位置终止,并在这个范围内替换并插入新的字符串,因此我们需要传入四个参数:insert(str,index,len,replaceStr):
replace函数与insert函数类似,但是replace函数只需要传入三个参数replace(str,str1,str2);
如上我们可以看到传入的参数都是字符串类型的,而我们是str1字符串是包含于str字符串中的,如果在字符串str中找到了str1字符串,那么replace函数就会将该str1字符串修改为str2.。如果没有找到的话就不进行修改:
char_length函数用于获取我们传入的字符串的长度,即使在ASCII表中一个中文占3个字符,也依旧会以一个字符来进行计数:
select char_length('abc'),char_length('你好,java');
length函数与我们的char_length函数不同,它是按照ASCII码值来计数我们的字符长度,一个中文就是3个字符占位:
select length('abc'),length('你好,java');
trim函数可以让我们去掉该数据前后不想要的空格或者是字符。trim函数有多个重载方法:
trim(str)方法可以去掉数据前后的空格:
ltrim(str) 用于当我们只想去掉左边的空格时使用的方法:
如上可能看得不大清楚,我们可以使用concat函数来连接字符串:
select concat('*',ltrim(' hi '),'*');
如上,我们左边的空格给去掉了,于是‘*’号就与我们的字符紧贴在一起,而右边的空格没有去掉。
与ltrim(str)刚刚好相反,去掉的是右边的空格,而左边的空格保留:
select concat('*',rtrim(' hi '),'*');
在上面的三个trim方法中都是用于去掉空格的,现在我们来指定特定的字符及字符串。可以使用trim(s from str)方法:
select name,sex,trim(00 from wages) from containnull;
从上图我们可以发现,当我们只想要去掉00时,却去掉的是该字段里面的所有数据含有0的部分,不管是0000,还是000。显然,这并不是我们想要的,因此不要忘记在我们的s那里加上引号:
select name,sex,trim( '00' from wages) from containnull;
trim(leading s from str)是为了解决当我们只想要去掉一边的字符,而想要留住另外一边的字符时使用的方法,该方法可以去掉左边的字符,但是不能去掉右边相同的字符或字符串:
select trim(leading 'she' from 'she is beautiful,yes she');
trim(trailing s from str)方法用于去掉右边的字符或字符串:
select trim(trailing 'she' from 'she is beautiful,yes she');
repeat函数顾名思义,就是返回该函数里面的字符的n次数目,因此里面需要传入两个参数
repeat(str,num):
space有空格的意思,因此space函数可以用来打印空格:
select length(space(5));
因为我们的空格用肉眼是看不到的,因此我们可以使用获取字符长度的length函数来返回里面的字符。
strcmp:string compare的缩写,可以用于两个字符串之间的比较,比较的依旧就是一个一个字母的ASCII码值大小比较,如果第一个字母一样就接着比第二个。因此我们的strcmp函数形式为:
strcmp(s1,s2)-----如果s1小于s2,那么结果返回-1;s1>s2→1;s1=s2→0:
select strcmp('b','a'),strcmp('a','b'),strcmp('a','a');
substr函数有点像我们java中的subString函数,用于字符串的切割,可以在字符串str指定的索引位置index开始选取长度为len的字符或字符串,形式为substr(str,index,len):
locate函数可以获取到当前字符或字符串在该父字符串中首次出现的位置,形如locate(s1,s2):
elt函数用于返回我们指定的索引位置的字符或字符串,形如elt(m,s1,s2,s3):
select elt(3,'hi','how','are','you');
filed函数有点与locate函数类似,都是返回该字符或字符串在指定的范围里面首次出现的位置,但是filed函数可以传入多个字符串参数,而locate函数只能传入两个字符串参数:
select field('mei','gong','zhong','mei');
find_in_set函数可以返回我们指定字符或字符串在父字符串中的位置,find_in_set函数形如find_in_set(s,'s1,s2,s3'),我们可以看到父字符串为一个以逗号分隔的字符串。一般的应用场景就是将我们的表格中的id当成字符串进行处理时会用到:
select find_in_set('mei','gong,zhong,zhong,mei');
reverse函数用于反转我们的字符串:
nullif函数用于判断两个字符或字符串是否相等,如果相等返回null,如果不相等则返回第一个字符或字符串:
select nullif('abc','abd'),nullif('abc','abc');
如果对于这些函数的使用还有些困惑的,请在评论区留言。