Oracle SQL:如何定位字符串下划线位置并实现截取?
解决下划线位置定位与字符串截取问题
1. 纠正INSTR函数的参数顺序
你完全搞反了INSTR的参数顺序!绝大多数数据库里,INSTR的正确语法是INSTR(源字符串, 要查找的子串)。你写的INSTR('_', COLUMN1)是在判断下划线这个字符里是否包含整个COLUMN1的内容,这显然不可能,所以全返回0。
把参数调换过来,写成INSTR(COLUMN1, '_'),针对示例数据STRING1_STRING2就能得到预期的8。
2. 下划线的转义问题
不需要转义下划线!只有在LIKE语句里,下划线是单字符通配符,这时候才需要转义(比如LIKE '%\_%')。但INSTR里下划线就是普通字符,直接写就行。
3. 实现字符串截取的正确语句
用修正后的INSTR配合SUBSTR就能完成需求:
SELECT SUBSTR(COLUMN1, 1, INSTR(COLUMN1, '_') - 1) AS LEFT_PART FROM your_table;
这条语句会把COLUMN1中第一个下划线之前的内容截取出来,对应示例数据就返回STRING1。
可选的简化写法(部分数据库支持)
像MySQL、MariaDB这类数据库提供了SUBSTRING_INDEX函数,能直接按分隔符截取指定部分,写法更简洁:
SELECT SUBSTRING_INDEX(COLUMN1, '_', 1) AS LEFT_PART FROM your_table;
效果和上面的语句完全一样,不用手动计算位置。
内容的提问来源于stack exchange,提问作者rickstar4life
相关产品推荐
相关产品推荐

