如何删除雪花 sql 中特定特殊字符 (~) 之后的字符串中的字符?

How can I remove characters in a string after a specific special character (~) in snowflake sql?

我正在使用 Snowflake SQL。我想从字符串中删除特殊字符 ~ 之后的字符。我该怎么做?

这是整个场景。让我解释。我确实有一个像 'CK#123456~fndkjfgdjkg' 这样的字符串。现在,我只想要#之后的数字。~之后什么都不要。这是数字长度因该字段值而异。它可能是 1 或 5 或 3。我想在 where class 中添加条件,其中此数字等于加入后其他 table 的 check_num。我正在 where 条件下尝试 REGEXP_SUBSTR(A.SRC_TXT, '(?<=CK#)(.+?\b)') = C.CHK_NUM 。我收到错误 'No repititive argument after ?'

您可以为此使用正则表达式

-- 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'

如果您需要在 ~ 之后删除其他特定字符集,您可以使用稍微复杂一些的正则表达式来完成此操作,但我需要您想要的 input/output 示例来帮助完成此操作。

编辑更新问题

这个正则表达式替换应该能满足您的需求。

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 

我可能会做类似下面的事情,足够简单但不如 RegEx 类型的函数那么酷。

set my_string='fooo~12345';
set search_for_me = '~';
SELECT SUBSTR($my_string, 1, DECODE(position($search_for_me, $my_string), 0, length($my_string), position($search_for_me, $my_string)));

希望对你有帮助...丰富

看起来前瞻和后视在 REGEXP 函数中 不受 支持,它们似乎在 LIST 命令的 PATTERN 子句中起作用. Snowflake 文档没有提及前瞻或后视的任何一种方式。

在你的例子中:

  • 查询引擎似乎正在寻找那个重复的参数,而您正在尝试向后看
  • 您没有指定要提取的内容。您有两个捕获组,但在这种情况下,所有内容都会返回
  • 既然您希望删除 ~ 之后的所有内容,您有一个分隔符,为什么不在您的 REGEXP_SUBSTR 函数中使用它呢?

尝试以下操作:

SELECT ,REGEXP_SUBSTR(,'\w+#(.+?)~',1,1,'is',1) 
FROM VALUES 
('CK#123456~fndkjfgdjkg')
,('QH#128fklj924~fndkjfgdjkg')
;

这寻找:

  • 一个或多个单词字符
  • 其次是#
  • 捕获一个或多个字符最多 not 包括 ~
  • Returns 捕获组中的字符

您可以将 .+? 更改为 \d+? 以确保模式仅为数字。 反斜杠必须用反斜杠转义。

可以在此处找到函数每个参数的说明: https://docs.snowflake.net/manuals/sql-reference/functions/regexp_substr.html

你可以检查一下!!

select substr('CK#123456~fndkjfgdjkg',4,6) 来自 dual;

输出 123456

https://docs.snowflake.net/manuals/sql-reference/functions/substr.html