一、字符串截取
1、substring(str, pos) 用法
从字符串的第 4 个字符位置开始取,直到结束。
mysql> select substring('example.com', 4);
+------------------------------+
| substring('example.com', 4) |
+------------------------------+
| mple.com |
+------------------------------+
2、substring(str, pos, len) 用法
注意到在函数 substring(str,pos, len)中, pos 可以是负值,但 len 不能取负值
从字符串的第 4 个字符位置开始取,只取 2 个字符。
mysql> select substring('example.com', 4, 2);
+---------------------------------+
| substring('example.com', 4, 2) |
+---------------------------------+
| mp |
+---------------------------------+
从字符串的第 4 个字符位置(倒数)开始取,直到结束。
mysql> select substring('example.com', -4);
+-------------------------------+
| substring('example.com', -4) |
+-------------------------------+
| .com |
+-------------------------------+
从字符串的第 4 个字符位置(倒数)开始取,只取 2 个字符。
mysql> select substring('example.com', -4, 2);
+----------------------------------+
| substring('example.com', -4, 2) |
+----------------------------------+
| .c |
+----------------------------------+
二、拼接字符串
1、CONCAT(str1,str2,…)函数是用来连接多个字符串,形成一个字符串
mysql> SELECT CONCAT('FIRST ', 'SECOND');
+----------------------------+
| CONCAT('FIRST ', 'SECOND') |
+----------------------------+
| FIRST SECOND |
+----------------------------+
对于mysql 的 like 而言,一般都要用 like concat() 组合,可以防止sql注入。例如,在mybatis 中
select * from area where area.name like concat( '%' , '#{name}' , '%' ) ;
2、group_concat( [distinct] 字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
功能: 将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
说明:
- distinct可以排除重复值;
- order by子句可以对结果中的值进行排序;
- separator是一个字符串值,缺省为一个逗号。
将上面的id号从大到小排序,且用'、'作为分隔符::
mysql> SELECT name, group_concat(id order by desc separator '、') from tt2 group by name
+---------+-------------------------------------------------+
| name | group_concat(id order by desc separator '、') |
+---------+-------------------------------------------------+
| 小丽 | 3 |
+-----------------------------------------------------------+
| 小明 | 6、5、1 |
+-----------------------------------------------------------+
| 小王 | 4、2 |
+-----------------------------------------------------------+
三、FIND_IN_SET 函数
SELECT
B.ID,
B.CLASSIFY_NAME,
B.CLASSIFY_TYPE,
B.IS_ENABLE,
B.ADATE,
B.UDATE,
(
SELECT
GROUP_CONCAT( T.`VALUE` SEPARATOR '、' )
FROM
T_S_PS_DICT T,
T_B_CASE_DICT_SORT C
WHERE
FIND_IN_SET( T.ID, C.CLASSIFY_DETAIL )
AND C.ID = B.ID
AND C.IS_DELETED = '0'
AND T.IS_DELETED = '0'
) CLASSIFY_DETAIL
FROM
T_B_CASE_DICT_SORT B
WHERE
B.IS_DELETED = '0'
ORDER BY
B.ADATE ASC