我想在SQL中的几行中拆分一行。
例如,我有' ADCT DROP INCALL - ' ,其中包含空格和' - '并且我希望例如在几行中值保持分离。
原始结果:
SELECT statuses FROM campaigns;
+-----------------------------------------+
| RESULT OF QUERY |
+-----------------------------------------+
| A ADCT DROP INCALL - |
+-----------------------------------------+
结果必须如下:
+-----------------------------------------+
| RESULT OF QUERY |
+-----------------------------------------+
| A |
| ADCT |
| DROP |
| INCALL |
+-----------------------------------------+
我尝试使用SUBSTRING_INDEX:
SELECT status
FROM statuses
WHERE statuses.status NOT IN (SELECT SUBSTRING_INDEX(TRIM(dial_statuses)," ", 1) FROM campaigns WHERE campaign_id = '4000')
ORDER BY STATUS;
抱歉,我知道这是非常基本的。
答案 0 :(得分:0)
答案 1 :(得分:0)
如果我正确地阅读此内容,则此问题已经被问到here:
SQL split values to multiple rows
答案从@fthiella说明如下:
select
tablename.id,
SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) name
from
(select 1 n union all
select 2 union all select 3 union all
select 4 union all select 5) numbers INNER JOIN tablename
on CHAR_LENGTH(tablename.name)
-CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1
order by
id, n
查看工作示例here:
答案 2 :(得分:0)
我相信你可以这样做:
SELECT
tablename.id,
SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1)
name
FROM
numbers
INNER JOIN tablename ON CHAR_LENGTH(tablename.name)
-CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1
ORDER BY
id, n
请参阅小提琴here。
如果您无法创建表格,那么解决方案可以是:
SELECT
tablename.id,
SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1)
name
FROM
(select 1 n union all
select 2 union all select 3 union all
select 4 union all select 5) numbers
INNER JOIN tablename ON CHAR_LENGTH(tablename.name)
-CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1
ORDER BY
id, n
示例小提琴是here。
答案 3 :(得分:0)
如果您只需要替换空格 - 那么您可以使用
SELECT TRIM(BOTH" \ n" FROM REPLACE(REPLACE(column_name,''," \ n")," - &# 34;," \ n"))FROM table;
如果你想要从开头和结尾开始前导或尾随空格,你可以从上面的语句中跳过trim。