SQL基于条件判断新增列:拆分4字符字段按规则拼接生成新列
实现方案
以下是兼容绝大多数主流数据库的标准SQL写法,你可以直接替换表名后使用:
1. 直接查询得到所需字段
SELECT col1, LEFT(col1, 2) AS `left`, RIGHT(col1, 2) AS rght, CONCAT( RIGHT(col1, 2), '.', -- 编码映射逻辑,CASE是标准SQL语法,兼容性最高 CASE LEFT(col1, 2) WHEN 'xx' THEN 1 WHEN 'xy' THEN 2 WHEN 'xz' THEN 3 END ) AS fin FROM 你的实际表名;
2. 如需给原表新增fin字段存储结果(以MySQL为例)
-- 第一步:新增fin字段,长度根据你的实际数据调整即可 ALTER TABLE 你的实际表名 ADD COLUMN fin VARCHAR(10); -- 第二步:批量更新fin字段值 UPDATE 你的实际表名 SET fin = CONCAT( RIGHT(col1, 2), '.', CASE LEFT(col1, 2) WHEN 'xx' THEN 1 WHEN 'xy' THEN 2 WHEN 'xz' THEN 3 END ) -- 可以加筛选条件保证只处理长度为4的col1数据,避免出错 WHERE LENGTH(col1) = 4;
逻辑说明
- 拆分逻辑:
LEFT(col1,2)直接取字符串前2位,RIGHT(col1,2)直接取字符串后2位,你要求的对半拆分需求可以直接用这两个函数实现 - 编码逻辑:用CASE语句做映射比多层IF嵌套可读性更高、更易维护,如果确实需要用IF语法,MySQL环境下可以替换为以下写法:
IF(LEFT(col1,2)='xx', 1, IF(LEFT(col1,2)='xy', 2, IF(LEFT(col1,2)='xz', 3, NULL))) - 拼接逻辑:用
CONCAT函数按顺序拼接右半部分、.、编码值即可得到目标fin字段
内容的提问来源于stack exchange,提问作者littletimmy
相关产品推荐
相关产品推荐

