删除Teradata SQL中第n个下划线后的所有字符

时间:2019-01-28 09:05:03

标签: sql teradata

我有一列的值为xxx_xxxx_xxxy_zzzz像这样的东西。我需要从列的给定值中删除第n个下划线或假设第三个下划线的所有字符,并在连接条件下使用其余字符串?

非常感谢您的帮助。

谢谢, 阿图尔

3 个答案:

答案 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”令牌。