Вы можете использовать регулярное выражение для этого
-- To remove just the character after a ~
select regexp_replace('fo~o bar','~.', '');
-- returns 'fo bar'
--If you want to keep the ~
select regexp_replace('fo~o bar','~.', '~');
-- returns 'fo~ bar'
--If you want to remove everything after the ~
select regexp_replace('fo~o bar','~.*', '');
--returns 'fo'
Если вам нужно удалить другие определенные c наборы символов после ~, вы, вероятно, можете сделать это с немного более сложным регулярным выражением, но я ' Мне нужны примеры вашего желаемого ввода / вывода, чтобы помочь с этим.
РЕДАКТИРОВАТЬ для обновленного вопроса
Эта замена регулярного выражения должна получить то, что вам нужно.
select regexp_replace('CK#123456~fndkjfgdjkg','CK#(\\d*)~.*', '\\1');
-- returns 123456
(\\d*)
получает ЛЮБОЕ число цифр в строке, и \\1
заставляет его заменить совпадение на то, что было в первом наборе скобок, который является вашим списком цифр. CK#
и ~.*
предназначены для того, чтобы убедиться, что вся строка соответствует и заменена.
Если CK#
также может варьироваться, вы можете использовать .*?
следующим образом.
select regexp_replace('ABCD123HI#123456~fndkjfgdjkg','.*?#(\\d*)~.*', '\\1')
-- returns 123456