根据长度将列值保存为两列

时间:2016-09-06 08:08:32

标签: mysql sql

我想根据长度从表中拆分值。 我有表格,其中我的列具有技术人员的id值(最多3位数)和技术人员合作伙伴(5位数)。我想将他们分成两个不同的技术人员,分为tech_id,合作伙伴分为partners_id

+-----------+
|   tech    |
+-----------+
|    64     |
+-----------+
|   60008   |
+-----------+
| 127;50047 |
+-----------+
|   ....    |
+-----------+

我尝试过这样的事情,但是在“'”附近我的语法不正确。第3行

SELECT (CASE
       WHEN LEN(tech) > 4
       ) AS partners_id ,
       (CASE
        WHEN LEN(tech)< 4
       ) AS tech_id
FROM database

感谢您的建议。这个查询如何处理由;分隔的值?

3 个答案:

答案 0 :(得分:1)

CASE语句的正确语法如下

SELECT CASE WHEN LENGTH(tech) > 4 THEN tech ELSE '' END AS partners_id ,
       CASE WHEN LENGTH(tech) <= 4 THEN tech ELSE '' END AS tech_id

FROM database

如果长度小于4或者值为partners_id列值,则根据技术列tech列中的值长度将为空白。 tech_id列基于其长度小于4的条件也是如此。

根据以下评论jarlh如果 ELSE 部分被忽略 NULL 值将包含在partner_idtech_id列中,如果它们各自的条件在CASE声明

中未达到
SELECT CASE WHEN LENGTH(tech) > 4 THEN tech  END AS partners_id ,
       CASE WHEN LENGTH(tech) <= 4 THEN tech END AS tech_id

FROM database

答案 1 :(得分:1)

尝试联盟

select TECH as PARTNERS_ID, '' as TECH_ID
from database -- bad name here
where length(TECH) > 4
union
select '' as PARTNERS_ID, TECH as TECH_ID
from database 
where length(TECH) <= 4

答案 2 :(得分:1)

尝试此查询

SELECT IFNULL((CASE WHEN length(tech) > 4 THEN tech END),'') AS partners_id ,
       IFNULL((CASE WHEN length(tech)< 4 THEN tech END),'') AS tech_id
FROM database;