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

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

Ваша помощь будет очень appeciated.

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

Привет, пожалуйста, предоставьте некоторую информацию, например, фактический столбец таблицы данных и ожидаемый результат, а также то, что вы на самом деле пытаетесь.

Sanpas 28.01.2019 10:16

Привет, Паскаль. Предположим, у меня есть значение данных как atul_bajpayee_india в столбце X таблицы, и мне нужно соединить его с столбцом Y другой таблицы, которая имеет значение данных как atul_bajpayee. Чтобы соединение произошло на X = Y, я должен удалить все значение после 3-го подчеркивание, включая подчеркивание, тогда только значение данных будет одинаковым. Короче говоря, оба столбца имеют одинаковые значения до второго подчеркивания, а значение после третьего подчеркивания является более определяющим и разным, что не требуется и вызывает проблему при соединении.

Atul Bajpayee 28.01.2019 11:30
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
878
3

Ответы 3

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

Вы можете использовать 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}')

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

вышеприведенное не сработает, instr требует 4 аргумента. INSTR(исходная_строка, строка_поиска,позиция, вхождение) SUBSTR(столбец,1,INSTR(столбец,'_',1,n)-1) [см. ответ выше] -1 требуется, чтобы не включать n-е подчеркивание, которое просматривается за

Tik 29.01.2019 12:17

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

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

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

Но он должен вернуть xxx_xxxx_xxxy :-)

dnoeth 30.01.2019 00:23

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

access_granted 30.01.2019 00:26

Другие вопросы по теме