如何使用SQL SUBSTRING相关函数移除Name_code字段多余WWW_前缀
解决方案
问题原因
你之前使用的SUBSTR(Name_code,4, length(Name_Code)-3)是固定从第4位开始截取,没有区分两种不同长度的前缀:
- 对
XX_开头的字符串,前缀长度为3,从第4位开始截取符合要求 - 对
WWW_开头的字符串,前缀长度为4,从第4位开始会把前缀最后的_也保留下来,得到不符合预期的结果
实现方法
通用兼容写法(支持所有主流SQL数据库)
通过CASE WHEN判断前缀类型,分别截取对应长度:
SELECT CASE WHEN Name_code LIKE 'WWW\_%' ESCAPE '\' THEN SUBSTR(Name_code, 5) ELSE SUBSTR(Name_code, 4) END AS processed_name_code FROM 你的表名;
注:LIKE语句中对下划线转义是为了避免下划线作为通配符匹配任意字符,部分数据库可省略ESCAPE '\'子句直接用反斜杠转义。
正则简化写法(支持MySQL 8.0+、Oracle、PostgreSQL、SQL Server 2017+等新版本数据库)
直接用正则替换掉开头的WWW_或XX_前缀,逻辑更简洁:
SELECT REGEXP_REPLACE(Name_code, '^(WWW_|XX_)', '') AS processed_name_code FROM 你的表名;
正则逻辑说明:^匹配字符串开头,(WWW_|XX_)匹配开头的WWW_或者XX_,只会替换最外层的前缀,不会影响中间的字符,完全匹配需求场景。
内容的提问来源于stack exchange,提问作者Deepak Kumar Nayak
相关产品推荐
相关产品推荐

