Mysql 实现行转列功能
问题:
将以“/”分割的字符串’aaa/bbb/ccc/ddd/eee/fff’,转成如下:
aaa
bbb
ccc
ddd
eee
fff
SQL:
SELECT
SUBSTRING_INDEX( SUBSTRING_INDEX('aaa/bbb/ccc/ddd/eee/fff', '/', b.help_topic_id + 1 ), '/',- 1 ) AS 列
FROM mysql.help_topic b where b.help_topic_id < (LENGTH('aaa/bbb/ccc/ddd/eee/fff')- LENGTH( REPLACE ('aaa/bbb/ccc/ddd/eee/fff', '/', '' ))+ 1 )
项目真实案例,如下我想要查询当前部门DEPTID的所有父部门信息,
SELECT
*
FROM
je_core_department d
WHERE
d.DEPTID IN (
SELECT
SUBSTRING_INDEX( SUBSTRING_INDEX( a.PATH, '/', b.help_topic_id + 1 ), '/',- 1 ) AS DEPTID
FROM
je_core_department a
LEFT JOIN mysql.help_topic b ON b.help_topic_id < ( LENGTH( a.PATH )- LENGTH( REPLACE ( a.PATH, '/', '' ))+ 1 )
WHERE
a.DEPTID = '00bwaiu8NkNaT6quYI6'
HAVING
DEPTID <> ''
AND DEPTID <> 'ROOT'
)
实现同样的功能SQL还可以这样:
SELECT * FROM je_core_department WHERE FIND_IN_SET(DEPTID,REPLACE((SELECT PATH from je_core_department WHERE DEPTID = "00bwaiu8NkNaT6quYI6"),"/",","));
有关 **FIND_IN_SET()**用法请戳这里!