Удалить все символы после n-го подчеркивания в Teradata sql - PullRequest
0 голосов
/ 28 января 2019

У меня есть столбец со значениями как xxx_xxxx_xxxy_zzzz, что-то вроде этого. Мне нужно удалить все символы после n-го или предположить 3-е подчеркивание из заданных значений столбца и использовать оставшуюся строку в условии соединения?

Ваша помощь будетбыть очень близким.

Спасибо, Атул

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Вы можете использовать INSTR, чтобы найти nth вхождение строки поиска:

Substr(col, 1, Instr(col, '_', 1, 3)-1)

Редактировать:

Лучший способ использует REGEXP_SUBSTR:

RegExp_Substr(col, '[^_]+(_[^_]+){0,n-1}')

Например, удалить все после 3-го подчеркивания:

RegExp_Substr('xxx_xxxx_xxxy_zzzz', '[^_]+(_[^_]+){0,2}')

Это также работает, если есть меньше чем n подчеркивания

0 голосов
/ 30 января 2019

Простым решением может быть использование этого:

select STRTOK( 'xxx_xxxx_xxxy_zzzz', '_', 4);

Это даст вам токен "zzzz".

0 голосов
/ 29 января 2019
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' и хотели удалить все после 3-го подчеркивания, это было бы

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

...