我有一列的值为xxx_xxxx_xxxy_zzzz像这样的东西。我需要从列的给定值中删除第n个下划线或假设第三个下划线的所有字符,并在连接条件下使用其余字符串?
非常感谢您的帮助。
谢谢, 阿图尔
答案 0 :(得分:0)
SELECT SUBSTR('atul_bajpayee_india',1,REGEXP_INSTR('atul_bajpayee_india', '_', 1, 2, 0, 'c')-1);
这将使REGEXP_INSTR用户在这种情况下找到第二个下划线作为REGEXP_INSTR中的第四个参数。这将返回字符串中的位置,然后可以将其用于获取子字符串。 -1不包括第二个下划线。
如果要使用初始示例“ xxx_xxxx_xxxy_zzzz”,并想删除第三个下划线后的所有内容,则将是
SELECT SUBSTR('xxx_xxxx_xxxy_zzzz',1,REGEXP_INSTR('xxx_xxxx_xxxy_zzzz', '_', 1, 3, 0, 'c')-1);
一些很好的进一步阅读这里 http://www.teradatawiki.net/2014/05/regular-expression-functions.html
答案 1 :(得分:0)
您可以使用INSTR查找搜索字符串中nth
的出现情况:
Substr(col, 1, Instr(col, '_', 1, 3)-1)
编辑:
更好的方法是使用REGEXP_SUBSTR:
RegExp_Substr(col, '[^_]+(_[^_]+){0,n-1}')
例如删除第三个下划线后的所有内容:
RegExp_Substr('xxx_xxxx_xxxy_zzzz', '[^_]+(_[^_]+){0,2}')
如果下划线少于 n 个,这也可以使用
答案 2 :(得分:0)
简单的解决方案可能是使用此方法:
g
这将为您提供“ zzzz”令牌。