如何向现有SQL表添加计算列,存储符合匹配规则的字符串前四位
解决方案
逻辑说明
你需要在新增计算列的逻辑中加入条件判断:提取description的前4位后,仅当符合匹配规则时返回对应值,否则返回NULL即可。注意你原查询中的LIKE '%ABCD%'写法存在问题:前后通配符会匹配包含目标字符串的任意子串,如果你仅需要前4位完全匹配指定值,直接使用等于判断或无前缀后缀的LIKE即可。
不同数据库的实现代码
SQL Server 版本(支持PERSISTED关键字实现持久化存储)
USE DB ALTER TABLE table1 ADD newcol AS ( CASE WHEN SUBSTRING(description, 1, 4) = 'PDFG' THEN SUBSTRING(description, 1, 4) ELSE NULL END ) PERSISTED
如果需要匹配多个指定值,可以调整判断条件:
CASE WHEN SUBSTRING(description, 1, 4) IN ('PDFG', 'XXXX', 'YYYY')
如果确实需要模糊匹配前4位包含某字符串,再调整为:
CASE WHEN SUBSTRING(description, 1, 4) LIKE '%ABCD%'
MySQL 版本(5.7及以上支持生成列,用STORED关键字实现持久化)
USE DB; ALTER TABLE table1 ADD COLUMN newcol VARCHAR(4) GENERATED ALWAYS AS ( IF(SUBSTRING(description, 1, 4) = 'PDFG', SUBSTRING(description, 1, 4), NULL) ) STORED;
效果验证
对应你提供的样本数据:
- PDFG_2013 AHSDHDF:前4位匹配规则,
newcol值为PDFG - ADHR_2310 ADGDGEE:前4位不匹配,
newcol值为NULL - DATW_5142 NFBSAEE:前4位不匹配,
newcol值为NULL
完全符合你的预期需求。
内容的提问来源于stack exchange,提问作者Mackem2020
相关产品推荐
相关产品推荐

