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

来源:互联网 发布:smt单片机嵌入式培训 编辑:程序博客网 时间:2024/05/10 03:20

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#

0 0
原创粉丝点击