与字符串共舞

Working with Strings

1.Converting the Lettercases of a String

select thing,upper(thing),lower(thing) from limbs;
upper()和lower()函数可以改变字符串大小写

concat(upper(left(str,1)),mid(str,2))
将字符串str的第一个字符改为大写,其他部分保持不变

注:当这两个函数失效时,原因很可能是它们所操作的对象是二进制串,而二进制串没有字符集和Collation,也没有字母大小写的区别。此时,可以首先将该字符串转换为非二进制串,使其具有字符集和Collation属性,从而可以改变其大小写。
select b,UPPER(convert(b using latin1)) as upper,LOWER(convert(b using latin1)) as lower from t;

为了确定一个表达式(函数)的返回值是否是二进制串,可以使用charset()函数。
select charset(version()),charset(md5('some string'));

2.Pattern Matching with Regular Expressions

select name from metal where name regexp '^co';
以特定子串开头

select name from metal where name regexp 'er$';
以特定子串结尾

select name from metal where name regexp 'er';
含有特定子串

select name from metal where name regexp '^..pp';
特定子串出现在某一位置

[abc]定义了一个集合,它可以与字符a、b、c中任一字符匹配

也可以用-定义集合区间。例如[a-z]定义的模式集合可以与从a到z的任意字符匹配;[0-9]定义的集合与从0到9的任一字符匹配;而[a-z0-9]与所有字符或者数字匹配;

如果要匹配的是所给集合之外的任意字符,可以在方括号内,以^开头定义集合。例如[^0-9]匹配除了数字之外的所有字符。

select name,name regexp '[[:xdigit:]]' from metal;
检查name中是否含有十六进制字符。

select name from metal where name regexp '^[aeiou] | er$';
查询所有以元音字母开头或者以er结尾的name字符串

3.Breaking Apart or Combining Strings

select name,left(name,2),mid(name,3,1),right(name,3) from metal;
left()和right()函数的第二个参数说明所要取得的子串长度。mid()函数的第二个参数说明从第几位开始取出子串,第三个参数说明所要取得的子串长度。

select name,substring(name,4),mid(name,4) from metal;
substring()函数从某个位置开始向右返回整个子串。

select name,substring_index(name,'r',1),substring_index(name,'i',-1) from metal;
使用substring_index(str,c,n)可以返回str中任意指定字符左侧或右侧的整个子串。该函数从str左侧查找字符c第n次出现的位置,然后返回该位置左侧的整个子串。如果n是负数,从str右侧开始查找c第|n|次出现的位置,并返回其右侧的整个子串。

注:如果字符串中没有第n个字符,substring_index()函数将返回整个字符串。另外,该函数是大小写敏感的。

select name from metal where left(name,1) >='n';
包含所有第一个字符大于n的name列值。

select concat('Hello,',USER(),',welcome to MySQL!') as greeting;
select concat(name,'ends in "id":',if(right(name,1)='d','yes','no')) as 'ends in "d"?' from metal;
使用concat()函数,可以将所有作为参数传递给它的字符串串联。

update metal set name=concat(name,'ide');
在metal表中name列的每一个值之后加上字符串ide:

update metal set name=left(name,char_length(name)-3);
删除每一个值最后的三个字母即可,使用char_length()函数来获取字符串长度

4.Searching for Substrings

select name,locate('in',name),locate('in',name,3) from metal;
locate()函数返回字符串中子字符串的第一个出现位置。如若子字符串不在字符串中,则返回值为0.。可选的第三个参数表示字符串中开始进行查找的位置。

Mizrim这个名字一共出现多少次?
select count(*) from kjv where match(vtext) against('Mizrim');
为了使用索引实现一个查询,使用match()函数来指定索引列并且使用against()函数来定义要查询的文本。

alter table tb1_name add fulltext(col1,col2,col3);
如果想使用fulltext同时对多列进行查询,可以在建立索引时指定所有需要被查询的列
select ...from tb1_name where match(col1,col2,col3) against('search string');
为了使用索引进行查询,在match()参数列表中指定所有列

注:对于你想要联合查询的每一列,你都需要一个对应的fulltext索引。

你可能感兴趣的:(正则表达式,charset,convert())