您可以为此使用正则表达式
-- 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'
如果您需要在 ~ 之后删除其他特定字符集,您可以使用稍微复杂一点的正则表达式来执行此操作,但我需要您想要的输入/输出示例来帮助解决这个问题。
编辑更新的问题
这个正则表达式替换应该得到你需要的。
select regexp_replace('CK#123456~fndkjfgdjkg','CK#(\\d*)~.*', '\\1');
-- returns 123456
(\\d*)
连续获得任意数量的数字,并\\1
导致它将匹配替换为第一组括号中的内容,这是您的数字列表。CK#
and是~.*
为了确保整个字符串得到匹配和替换。
如果CK#
can 也不同,您可以.*?
像这样使用。
select regexp_replace('ABCD123HI#123456~fndkjfgdjkg','.*?#(\\d*)~.*', '\\1')
-- returns 123456