У меня есть столбец со значениями как xxx_xxxx_xxxy_zzzz, что-то вроде этого. Мне нужно удалить все символы после n-го или предположим, что 3-е подчеркивание из заданных значений столбца и использовать оставшуюся строку в условии соединения?
Ваша помощь будет очень appeciated.
Спасибо , Атул
Привет, Паскаль. Предположим, у меня есть значение данных как atul_bajpayee_india в столбце X таблицы, и мне нужно соединить его с столбцом Y другой таблицы, которая имеет значение данных как atul_bajpayee. Чтобы соединение произошло на X = Y, я должен удалить все значение после 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-е подчеркивание, которое просматривается за
Простым решением может быть использование этого:
select STRTOK( 'xxx_xxxx_xxxy_zzzz', '_', 4);
Это даст вам токен «zzzz».
Но он должен вернуть xxx_xxxx_xxxy :-)
Первоначальный запрос был: «Мне нужно удалить все символы после n-го или предположим, что 3-е подчеркивание из заданных значений столбца и использовать оставшуюся строку» - так что это будет делать именно это, нет?
Привет, пожалуйста, предоставьте некоторую информацию, например, фактический столбец таблицы данных и ожидаемый результат, а также то, что вы на самом деле пытаетесь.