如何将字符串末尾2个字符移至开头?求除拼接外的SQL实现方法
替代字符串拼接的实现方案
针对你需求的字符串处理场景,除了显式使用SUBSTR拼接的方式外,还有更灵活的正则表达式方案,同时也可以通过先清理字符串再调整位置的方式实现,以下是具体示例:
1. 正则表达式替换(REGEXP_REPLACE)
这种方法无需手动拼接子串,通过正则匹配字符串结构直接完成替换,适配性更强(比如前缀长度不固定时也能正常工作):
SELECT REGEXP_REPLACE('FM73457 2038', '([A-Z0-9]+) 20([0-9]{2})', '\2\1') FROM dual;
逻辑说明:
([A-Z0-9]+):匹配空格前的所有字母数字字符(即示例中的FM73457),作为第一个捕获组20:匹配需要移除的空格和固定字符"20"([0-9]{2}):匹配最后两位数字(即示例中的38),作为第二个捕获组\2\1:替换时将第二个捕获组移到前面,第一个捕获组跟在后面,自动完成格式转换
2. 先清理再调整位置(逻辑更清晰的拼接变种)
如果不想用正则,可以先移除空格和"20",再将处理后字符串的最后两位移到开头:
WITH cleaned_str AS ( SELECT REPLACE(REPLACE('FM73457 2038', ' ', ''), '20', '') AS str FROM dual ) SELECT SUBSTR(str, -2) || SUBSTR(str, 1, LENGTH(str)-2) FROM cleaned_str;
逻辑说明:
- 先用两层
REPLACE去掉空格和"20",得到FM7345738 - 再通过
SUBSTR(str, -2)提取最后两位,SUBSTR(str, 1, LENGTH(str)-2)提取前面的部分,最后拼接成目标格式
以上两种方法执行后都能得到结果38FM73457,其中正则方案更适合结构固定但长度可变的字符串场景。
内容的提问来源于stack exchange,提问作者Ravi Junghare
相关产品推荐
相关产品推荐

