如何使用SQL将字符串中'-'前的数字替换为固定文本'140'
SQL实现方案:替换字符串中'-'前的数字为'140'
这里有两种简洁的SQL方案可以实现你想要的效果,核心思路是提取-之后的子串,再和硬编码的140拼接起来,同时自动去掉分隔符-:
方案1:使用SUBSTRING_INDEX函数
SUBSTRING_INDEX可以快速截取分隔符前后的内容,当第三个参数为-1时,会返回分隔符最后一次出现之后的所有内容(刚好符合我们的需求):
SELECT CONCAT('140', SUBSTRING_INDEX(your_column, '-', -1)) AS transformed_value FROM your_table;
验证示例
对于输入字符串"1189-13627273":
SUBSTRING_INDEX("1189-13627273", '-', -1)返回13627273- 拼接
140后得到14013627273,完全匹配期望输出。
方案2:使用LOCATE+SUBSTRING函数
如果你的SQL方言对SUBSTRING_INDEX支持有限,可以用LOCATE找到-的位置,再用SUBSTRING截取后续内容:
SELECT CONCAT('140', SUBSTRING(your_column, LOCATE('-', your_column) + 1)) AS transformed_value FROM your_table;
函数说明
LOCATE('-', your_column):返回-在字符串中的位置(比如1189-13627273中,-的位置是5)SUBSTRING(your_column, 5 + 1):从第6位开始截取,得到13627273- 拼接
140后得到目标结果。
处理特殊情况(可选)
如果你的数据中存在不含-的字符串,可以用CASE语句做兼容处理:
SELECT CASE WHEN LOCATE('-', your_column) > 0 THEN CONCAT('140', SUBSTRING_INDEX(your_column, '-', -1)) ELSE your_column -- 无分隔符时返回原字符串,可根据需求调整 END AS transformed_value FROM your_table;
内容的提问来源于stack exchange,提问作者Mo T
相关产品推荐
相关产品推荐

