mysql 字符串处理的一些常见函数

Mysql字符串处理函数小结

测试的数据库:

    mysql> select * from test_tran;
    +----+------------------------+
    | id | name                   |
    +----+------------------------+
    | 3  | B,kiki                 |
    | 4  | Living,Happing,Working |
    +----+------------------------+
  • UPPER和UCASE
    返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成大写。该函数对多字节是可靠的。
    select upper('name');
    +---------------+
    | upper('name') |
    +---------------+
    | NAME          |
    +---------------+
  • 列表内容

    LOWER和LCASE
    返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成小写。该函数对多字节是可靠的。

  • FIND_IN_SET(str,strlist)
    如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。一个字符串表是被“,”分隔的子串组成的一个字符
    串。如果第一个参数是一个常数字符串并且第二个参数是一种类型为SET的列,FIND_IN_SET()函数被优化而使用位运
    算!如果str不是在strlist里面或如果strlist是空字符串,返回0。如果任何一个参数是NULL,返回NULL。如果第一
    个参数包含一个“,”,该函数将工作不正常。看面是二种不同的效果,可以看一下

    添加一条记录,insert into test_tran value('5','kikiTsao,NBA');,数据表变为

    +----+------------------------+
    | id | name                   |
    +----+------------------------+
    | 3  | B,kiki                 |
    | 4  | Living,Happing,Working |
    | 5  | kikiTsao,NBA           |
    +----+------------------------+

如果我们想要查找带kiki的数据条数,如果用like模糊查询的话,会出现两条数据。
如果只确定绝对匹配‘kiki’的话,可以使用find_in_set()字符串处理函数。

    mysql> select * from test_tran where find_in_set('kiki',name);
    +----+--------+
    | id | name   |
    +----+--------+
    | 3  | B,kiki |
    +----+--------+
    1 row in set

    用模糊查询:
    mysql> select * from test_tran where name like '%kiki%';
    +----+--------------+
    | id | name         |
    +----+--------------+
    | 3  | B,kiki       |
    | 5  | kikiTsao,NBA |
    +----+--------------+
    2 rows in set
  • FIELD(str,str1,str2,str3,...)返回str在str1, str2, str3, …清单的索引。如果str没找到,返回0。
    mysql> select field('a','b','c','a');
    +------------------------+
    | field('a','b','c','a') |
    +------------------------+
    |                      3 |
    +------------------------+
  • 延伸:用FIELD自定义排序
    加入一个字段dept

    
    mysql> select * from test_tran;
    +----+------------------------+------+
    | id | name                   | dept |
    +----+------------------------+------+
    | 3  | B,kiki                 | A    |
    | 4  | Living,Happing,Working | A    |
    | 5  | kikiTsao,NBA           | B    |
    | 6  | NBAkikid,KIE           | C    |
    +----+------------------------+------+
    
    
    用field自定义新的索引规则:
    mysql> select * from test_tran order by field(dept,'b','a','c');
    +----+------------------------+------+
    | id | name                   | dept |
    +----+------------------------+------+
    | 5  | kikiTsao,NBA           | B    |
    | 3  | B,kiki                 | A    |
    | 4  | Living,Happing,Working | A    |
    | 6  | NBAkikid,KIE           | C    |
    +----+------------------------+------+
    
    mysql> select field(dept,'b','a','c') from test_tran;
    +-------------------------+
    | field(dept,'b','a','c') |
    +-------------------------+
    |                       2 |
    |                       2 |
    |                       1 |
    |                       3 |
    +-------------------------+
    • ELT(N,str1,str2,str3,...)如果N= 1,返回str1,如果N= 2,返回str2,等等。
      如果N小于1或大于参数个数,返回NULL。ELT()是FIELD()反运算。
    mysql> select elt(2,'b','c','a');
    +--------------------+
    | elt(2,'b','c','a') |
    +--------------------+
    | c                  |
    +--------------------+
    mysql> select id,name,elt(1,id,name,dept) from test_tran;
    +----+------------------------+---------------------+
    | id | name                   | elt(1,id,name,dept) |
    +----+------------------------+---------------------+
    | 3  | B,kiki                 | 3                   |
    | 4  | Living,Happing,Working | 4                   |
    | 5  | kikiTsao,NBA           | 5                   |
    | 6  | NBAkikid,KIE           | 6                   |
    +----+------------------------+---------------------+
  • REPLACE(str,from_str,to_str)返回字符串str,其字符串from_str的所有出现由字符串to_str代替。

  • SUBSTRING(str FROM pos)从字符串str的起始位置pos返回一个子串。mysql数据库的下标是从1开始的。

    mysql> select substring('I love you!' from 1 for 4);
    mysql> select substring('I love you!', 1,4);
    +---------------------------------------+
    | substring('I love you!' from 1 for 4) |
    +---------------------------------------+
    | I lo                                  |
    +---------------------------------------+

    mysql> select substring('I love you!', 0,4);
    +-------------------------------+
    | substring('I love you!', 0,4) |
    +-------------------------------+
    |                               |
    +-------------------------------+
  • SUBSTRING_INDEX(str,delim,count)返回从字符串str的第count个出现的分隔符delim之后的子串。
    如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,
    返回最后的分隔符到右边的所有字符(从右边数)。 从左找到第一个为,的位置,并取左侧的字符。
    mysql> select substring_index("ni,hao,ma",',',1);
    +------------------------------------+
    | substring_index("ni,hao,ma",',',1) |
    +------------------------------------+
    | ni                                 |
    +------------------------------------+


    从右找到第一个为,的位置,并取右侧的字符。
    mysql> select substring_index("ni,hao,ma",',',-1);
    +-------------------------------------+
    | substring_index("ni,hao,ma",',',-1) |
    +-------------------------------------+
    | ma                                  |
    +-------------------------------------+
  • TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)返回字符串str,其所有remstr前缀或后缀被删除了。
    如果没有修饰符BOTH、LEADING或TRAILING给出,BOTH被假定。如果remstr没被指定,空格被删除。
    默认是去除空格,制定remstr之后,会去除指定字符。LEADING和TRAILING表示去除字符串前或者的指定字符。
    mysql> select trim('a' from 'adegrga');
    +--------------------------+
    | trim('a' from 'adegrga') |
    +--------------------------+
    | degrg                    |
    +--------------------------+

    mysql> select trim(leading 'a' from 'adegrga');
    +----------------------------------+
    | trim(leading 'a' from 'adegrga') |
    +----------------------------------+
    | degrga                           |
    +----------------------------------+    
  • 字符串连接函数CONCAT/CONCAT_WS/GROUP_CONCAT

是在多字段查询的时候了解了这个函数。

多字段查询:

select 字段 from 表名 where CONCAT(要查询的字段1,字段2) LIKE '%查询字符%';
就可以查到指定字段1和字段2在内的匹配的字段。

CONCAT是直接连接
mysql> select concat('fdsaf','fwerwer');
+---------------------------+
| concat('fdsaf','fwerwer') |
+---------------------------+
| fdsaffwerwer              |
+---------------------------+
CONCAT_WS是通过一个分隔符连接
mysql> select concat_WS(',','dfd','fere');
+-----------------------------+
| concat_WS(',','dfd','fere') |
+-----------------------------+
| dfd,fere                    |
+-----------------------------+
GROUP_CONCAT会通过group by 分组之后,把想要的字段连接起来,用逗号分隔。
mysql> select group_concat(name) from base_op group by test_col;
+--------------------+
| group_concat(name) |
+--------------------+
| weiwei,fefge       |
| kiki               |
+--------------------+

自己觉得常用的写在这了,其他请参看博文http://blog.51yip.com/mysql/965.html#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值