SQL数据库字段拆分:WEB类记录按'-'拆分,OCM类保留原内容
按规则拆分SQL字段的解决方案
根据你的需求,我们可以通过CASE语句结合字符串拆分函数实现字段的规则化拆分,以下是主流SQL数据库的实现方式:
MySQL 实现
SELECT CASE WHEN your_column LIKE '%WEB%' THEN SUBSTRING_INDEX(your_column, '-', 1) WHEN your_column LIKE '%OCM%' THEN your_column END AS first_field, CASE WHEN your_column LIKE '%WEB%' THEN SUBSTRING_INDEX(your_column, '-', -1) WHEN your_column LIKE '%OCM%' THEN NULL END AS second_field FROM your_table;
SUBSTRING_INDEX(your_column, '-', 1):截取-符号第一次出现前的内容,作为WEB类记录的第一个字段SUBSTRING_INDEX(your_column, '-', -1):截取-符号最后一次出现后的内容,作为WEB类记录的第二个字段- 通过
CASE分支判断匹配规则,分别赋值
SQL Server 实现
SQL Server没有直接的SUBSTRING_INDEX函数,需要结合CHARINDEX和SUBSTRING实现:
SELECT CASE WHEN your_column LIKE '%WEB%' THEN LEFT(your_column, CHARINDEX('-', your_column) - 1) WHEN your_column LIKE '%OCM%' THEN your_column END AS first_field, CASE WHEN your_column LIKE '%WEB%' THEN RIGHT(your_column, LEN(your_column) - CHARINDEX('-', your_column)) WHEN your_column LIKE '%OCM%' THEN NULL END AS second_field FROM your_table;
CHARINDEX('-', your_column):定位-符号的位置LEFT和RIGHT函数分别截取符号前后的内容
PostgreSQL 实现
PostgreSQL的SPLIT_PART函数可以直接按分隔符拆分字段:
SELECT CASE WHEN your_column LIKE '%WEB%' THEN SPLIT_PART(your_column, '-', 1) WHEN your_column LIKE '%OCM%' THEN your_column END AS first_field, CASE WHEN your_column LIKE '%WEB%' THEN SPLIT_PART(your_column, '-', 2) WHEN your_column LIKE '%OCM%' THEN NULL END AS second_field FROM your_table;
SPLIT_PART(your_column, '-', n):直接取拆分后的第n部分内容
验证示例
针对你给出的测试记录,执行以上语句会得到如下结果:
| 原记录 | first_field | second_field |
|---|---|---|
| WEBNOTE-053122 | WEBNOTE | 053122 |
| WEBEVV-121222 | WEBEVV | 121222 |
| OCM-TIXOC2 | OCM-TIXOC2 | NULL |
| OCM-LNTHEOCM | OCM-LNTHEOCM | NULL |
内容的提问来源于stack exchange,提问作者user19820140
相关产品推荐
相关产品推荐

