使用 regexp_replace 替换雪花中的特殊字符

时间:2020-12-21 15:09:20

标签: snowflake-cloud-data-platform

其中一列有特殊字符需要用空格替换。 我正在使用 REGEXP_REPLACE,但抛出错误,因为列的排序规则为“en-ci”

SQL 命令: select REGEXP_REPLACE(INPUT_STRING, '[+,()]', ' ',1,0) FROM TABLE;

下面是错误: SQL 编译错误:error line 1 at position 7 Function REGEXP_REPLACE does not support collation.

您的建议可能会很有帮助。

谢谢。

2 个答案:

答案 0 :(得分:0)

我确认了使用 en-ci 整理的列不适用于 REGEXP_REPLACE 的行为。我怀疑并确认 Snowflake UDF 中的 JavaScript 正则表达式替换会起作用。

我编写了一组 Snowflake UDF,以使用 JavaScript 的正则表达式尽可能接近 Snowflake 正则表达式函数的语法。这样做的目的是支持前瞻和后视,但同样的功能也将支持这个用例。

您可以在此处获取 UDF:https://github.com/GregPavlik/SnowflakeUDFs/blob/main/Regex.txt

您可以在此处获取简要文档: https://github.com/GregPavlik/SnowflakeUDFs/blob/main/RegExp2_Functions.pdf

然后,您可以通过在 Snowflake 正则表达式函数名称的末尾添加“2”来运行您的语句。然后它将使用模拟该函数行为的 UDF,但使用 JavaScript 的正则表达式:

select REGEXP_REPLACE2(INPUT_STRING, '[+,()]', ' ',1,0) FROM TABLE;

答案 1 :(得分:0)

您只需要通过将空字符串传递给 COLLATE 函数的 参数来从列中删除排序规则,就像这样 {{1} }
这适用于雪花中不支持整理的任何正则表达式相关函数:)


在你的情况下,你应该做这样的事情:
COLLATE(COLLATED_COLUMN, '')

P.S:这个很难理解,来自秘鲁的问候!