设为首页 收藏本站
查看: 1023|回复: 0

[经验分享] 【MySQL】SQL 里面的字符串操作

[复制链接]

尚未签到

发表于 2018-10-22 08:18:32 | 显示全部楼层 |阅读模式
  Reference : http://www.cnblogs.com/xiangxiaodong/archive/2011/02/21/1959589.html
  使用举例:
  select stock_code, concat(substring(date_info, 9, 4), "00") from stock_real order by stock_code;
  二,mysql字符串操作函数
  1,UPPER和UCASE
  返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成大写。该函数对多字节是可靠的。
mysql> select name,UPPER(name) from string_test where name='tank';  
+------+-------------+
  
| name | UPPER(name) |
  
+------+-------------+
  
| tank | TANK        |
  
+------+-------------+
  
1 row in set (0.00 sec)
  2,LOWER和LCASE
  返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成小写。该函数对多字节是可靠的。
mysql> select sex,LCASE(job) from string_test where job='DUCK';  
+------+------------+
  
| sex  | LCASE(job) |
  
+------+------------+
  
|    1 | duck       |
  
+------+------------+
  
1 row in set (0.00 sec)
  3,FIND_IN_SET(str,strlist)
  如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。一个字符串表是被“,”分隔的子串组成的一个字符串。如果第一个参数是一个常数字符串并且第二个参数是一种类型为SET的列,FIND_IN_SET()函数被优化而使用位运算!如果str不是在strlist里面或如果 strlist是空字符串,返回0。如果任何一个参数是NULL,返回NULL。如果第一个参数包含一个“,”,该函数将工作不正常。看面是二种不同的效果,可以看一下
mysql> SELECT id,name FROM string_test WHERE find_in_set('fly',hobby);  
+----+-------+
  
| id | name  |
  
+----+-------+
  
|  2 | zhang |
  
+----+-------+
  
1 row in set (0.00 sec)
  

  
mysql> SELECT id,name FROM string_test WHERE hobby like 'fly%';
  
+----+-------+
  
| id | name  |
  
+----+-------+
  
|  2 | zhang |
  
|  3 | ying  |
  
+----+-------+
  
2 rows in set (0.00 sec)
  4,FIELD(str,str1,str2,str3,…)
  返回str在str1, str2, str3, …清单的索引。如果str没找到,返回0。FIELD()是ELT()反运算。
mysql> SELECT id, name, FIELD( id, name, sex, job, hobby )  
-> FROM string_test where id < 4;
  
+----+-------+------------------------------------+
  
| id | name  | FIELD( id, name, sex, job, hobby ) |
  
+----+-------+------------------------------------+
  
|  1 | tank  |                                  2 |
  
|  2 | zhang |                                  0 |
  
|  3 | ying  |                                  0 |
  
+----+-------+------------------------------------+
  
3 rows in set (0.00 sec)
  5.ELT(N,str1,str2,str3,…)
  如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小于1或大于参数个数,返回NULL。ELT()是FIELD()反运算。
mysql> SELECT id, name, ELT(1, id, name, sex, job, hobby ) FROM string_test where id < 4;  
+----+-------+------------------------------------+
  
| id | name  | ELT(1, id, name, sex, job, hobby ) |
  
+----+-------+------------------------------------+
  
|  1 | tank  | 1                                  |
  
|  2 | zhang | 2                                  |
  
|  3 | ying  | 3                                  |
  
+----+-------+------------------------------------+
  
3 rows in set (0.00 sec)
  

  
mysql> SELECT id, name, ELT(2, id, name, sex, job, hobby ) FROM string_test where id < 4;
  
+----+-------+------------------------------------+
  
| id | name  | ELT(2, id, name, sex, job, hobby ) |
  
+----+-------+------------------------------------+
  
|  1 | tank  | tank                               |
  
|  2 | zhang | zhang                              |
  
|  3 | ying  | ying                               |
  
+----+-------+------------------------------------+
  
3 rows in set (0.00 sec)
  6,REPLACE(str,from_str,to_str)
  返回字符串str,其字符串from_str的所有出现由字符串to_str代替。
mysql> SELECT id,REPLACE(hobby,"firend",'living') FROM string_test WHERE id = 2;  

  
+----+----------------------------------+
  
| id | REPLACE(hobby,"firend",'living') |
  
+----+----------------------------------+
  
|  2 | fly,make living                  |
  
+----+----------------------------------+
  
1 row in set (0.00 sec)
  7,REPEAT(str,count)
  返回由重复countTimes次的字符串str组成的一个字符串。如果count  SELECT id,REPEAT(name,2) FROM string_test WHERE id > 1 and id < 4;  
+----+----------------+
  
| id | REPEAT(name,2) |
  
+----+----------------+
  
|  2 | zhangzhang     |
  
|  3 | yingying       |
  
+----+----------------+
  
2 rows in set (0.00 sec)
  8,REVERSE(str)
  返回颠倒字符顺序的字符串str。
mysql> SELECT id,reverse(name) FROM string_test WHERE id > 1 and id < 4;  
+----+---------------+
  
| id | reverse(name) |
  
+----+---------------+
  
|  2 | gnahz         |
  
|  3 | gniy          |
  
+----+---------------+
  
2 rows in set (0.00 sec)
  9,INSERT(str,pos,len,newstr)
  返回字符串str,在位置pos起始的子串且len个字符长得子串由字符串newstr代替。
mysql> select id,name,INSERT(hobby,10,6,'living') from string_test where id = 2;  

  
+----+-------+-----------------------------+
  
| id | name  | INSERT(hobby,10,6,'living') |
  
+----+-------+-----------------------------+
  
|  2 | zhang | fly,make living             |
  
+----+-------+-----------------------------+
  
1 row in set (0.00 sec)
  10,SUBSTRING(str FROM pos)
  从字符串str的起始位置pos返回一个子串。下面的sub2没有值,因为mysql数据库的下标是从1开始的。
mysql> SELECT id, substring( hobby, 1, 6) AS sub1, substring( hobby from 0 for 8  
) AS sub2,substring( hobby,2) AS sub3, substring( hobby from 4 ) AS sub4 FROM s
  
tring_test WHERE id =4;
  
+----+--------+------+-----------+---------+
  
| id | sub1   | sub2 | sub3      | sub4    |
  
+----+--------+------+-----------+---------+
  
|  4 | i love |      |  love you | ove you |
  
+----+--------+------+-----------+---------+
  
1 row in set (0.00 sec)
  11,SUBSTRING_INDEX(str,delim,count)
  返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。
mysql> SELECT id,SUBSTRING_INDEX(hobby,',',2) as test1,SUBSTRING_INDEX(hobby,','  
,-1) as test2 FROM string_test WHERE id = 3;
  
+----+----------------+---------+
  
| id | test1          | test2   |
  
+----+----------------+---------+
  
|  3 | flying,driving | testing |
  
+----+----------------+---------+
  
1 row in set (0.01 sec)
  12,LTRIM(str)
  返回删除了其前置空格字符的字符串str。
mysql> SELECT id,LTRIM(job) FROM string_test WHERE id = 4;  
+----+----------------+
  
| id | LTRIM(job)     |
  
+----+----------------+
  
|  4 | love your love |
  
+----+----------------+
  
1 row in set (0.00 sec)
  13,RTRIM(str)
  返回删除了其拖后空格字符的字符串str。
mysql> SELECT id,RTRIM(job) FROM string_test WHERE id = 4;  
+----+----------------+
  
| id | RTRIM(job)     |
  
+----+----------------+
  
|  4 | love your love |
  
+----+----------------+
  
1 row in set (0.00 sec)
  14,TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
  返回字符串str,其所有remstr前缀或后缀被删除了。如果没有修饰符BOTH、LEADING或TRAILING给出,BOTH被假定。如果remstr没被指定,空格被删除。
mysql> select trim(' test  ');  
+-----------------+
  
| trim(' test  ') |
  
+-----------------+
  
| test            |
  
+-----------------+
  
1 row in set (0.01 sec)
  

  
mysql> SELECT id,TRIM(LEADING "love" from job) as test1,TRIM(BOTH "love" from jo
  
b) as test2,TRIM(TRAILING "love" from job) as test3 FROM string_test WHERE id =
  
4
  
-> ;
  
+----+------------+--------+------------+
  
| id | test1      | test2  | test3      |
  
+----+------------+--------+------------+
  
|  4 |  your love |  your  | love your  |
  
+----+------------+--------+------------+
  
1 row in set (0.00 sec)
  15,MID(str,pos,len)
  从字符串str返回一个len个字符的子串,从位置pos开始。使用FROM的变种形式是ANSI SQL92语法。
mysql>  SELECT id, mid( hobby, 1, 6 ) AS sub1, mid( hobby  
-> FROM 0
  
-> FOR 8 ) AS sub2, mid( hobby, 2 ) AS sub3, mid( hobby
  
-> FROM 4 ) AS sub4
  
-> FROM string_test
  
-> WHERE id =4 ;
  
+----+--------+------+-----------+---------+
  
| id | sub1   | sub2 | sub3      | sub4    |
  
+----+--------+------+-----------+---------+
  
|  4 | i love |      |  love you | ove you |
  
+----+--------+------+-----------+---------+
  
1 row in set (0.00 sec)
  

  
mysql>
  16,LPAD(str,len,padstr)
  返回字符串str,左面用字符串padstr填补直到str是len个字符长。
mysql> SELECT id,LPAD(name,11,"zhang ") FROM string_test WHERE id = 3;  
+----+------------------------+
  
| id | LPAD(name,11,"zhang ") |
  
+----+------------------------+
  
|  3 | zhang zying            |
  
+----+------------------------+
  
1 row in set (0.00 sec)
  17,RPAD(str,len,padstr)
  返回字符串str,右面用字符串padstr填补直到str是len个字符长。
mysql> SELECT id,RPAD(name,11," ying") FROM string_test WHERE id = 2;  
+----+-----------------------+
  
| id | RPAD(name,11," ying") |
  
+----+-----------------------+
  
|  2 | zhang ying            |
  
+----+-----------------------+
  
1 row in set (0.00 sec)
  18,LEFT(str,len)
  返回字符串str的最左面len个字符。
mysql> SELECT id,left(job,4) FROM string_test WHERE id = 4;  
+----+-------------+
  
| id | left(job,4) |
  
+----+-------------+
  
|  4 | love        |
  
+----+-------------+
  
1 row in set (0.00 sec)
  19,RIGHT(str,len)
  返回字符串str的最右面len个字符。
mysql> SELECT id,right(job,4) FROM string_test WHERE id = 4;  
+----+--------------+
  
| id | right(job,4) |
  
+----+--------------+
  
|  4 | love         |
  
+----+--------------+
  
1 row in set (0.00 sec)
  20,位置控制函数
  POSITION(substr IN str)
  返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.
  LOCATE(substr,str,pos)
  返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0。
  INSTR(str,substr)
  返回子串substr在字符串str中的第一个出现的位置。这与有2个参数形式的LOCATE()相同,除了参数被颠倒。
mysql> SELECT id,INSTR(job,"you") as instr,LOCATE('love',job,3) as locate,POSITI  
ON('love' in job) as position FROM string_test WHERE id = 4;
  
+----+-------+--------+----------+
  
| id | instr | locate | position |
  
+----+-------+--------+----------+
  
|  4 |     6 |     11 |        1 |
  
+----+-------+--------+----------+
  
1 row in set (0.00 sec)
  21,得到字符串长度的函数
  LENGTH(str),OCTET_LENGTH(str),CHAR_LENGTH(str),CHARACTER_LENGTH(str)
mysql> SELECT id,LENGTH(job) as one,OCTET_LENGTH(job) as two,CHAR_LENGTH(job) as  
three,CHARACTER_LENGTH(job) as four FROM string_test WHERE id = 4;
  
+----+-----+-----+-------+------+
  
| id | one | two | three | four |
  
+----+-----+-----+-------+------+
  
|  4 |  14 |  14 |    14 |   14 |
  
+----+-----+-----+-------+------+
  
1 row in set (0.00 sec)
  22,合并多个字符串,或者表中的多个字段
  CONCAT(str1,str2,…)
  返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。
mysql> SELECT id,CONCAT(name,job,hobby) FROM string_test WHERE id = 4;  
+----+-----------------------------------+
  
| id | CONCAT(name,job,hobby)            |
  
+----+-----------------------------------+
  
|  4 | tankzhanglove your lovei love you |
  
+----+-----------------------------------+
  
1 row in set (0.00 sec)
  23,进制转换
  BIN(N)
  返回二进制值N的一个字符串表示,在此N是一个长整数(BIGINT)数字,这等价于CONV(N,10,2)。如果N是NULL,返回NULL。
  OCT(N)
  返回八进制值N的一个字符串的表示,在此N是一个长整型数字,这等价于CONV(N,10,8)。如果N是NULL,返回NULL。
  HEX(N)
  返回十六进制值N一个字符串的表示,在此N是一个长整型(BIGINT)数字,这等价于CONV(N,10,16)。如果N是NULL,返回NULL。
  ASCII(str)
  返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。
mysql> select bin(20),oct(20),hex(20),ascii(20);  
+---------+---------+---------+-----------+
  
| bin(20) | oct(20) | hex(20) | ascii(20) |
  
+---------+---------+---------+-----------+
  
| 10100   | 24      | 14      |        50 |
  
+---------+---------+---------+-----------+
  
1 row in set (0.02 sec)
  上面我只例举了一部分对字符串进行操作的函数,并且是我觉得我们平时会用的,有可能会用到的一些函数。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624724-1-1.html 上篇帖子: 如何创建高级连接SQL作关联 下篇帖子: ERROR! The server quit without updating PID file
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表