Snowflake SQL中replace函数转义*失败,求ASCII替代方案
解决Snowflake SQL函数中replace()替换*的语法错误问题
问题根源
你的报错是因为Snowflake不支持用\转义*——*本身不属于字符串中的特殊字符,不需要转义;多余的\反而触发了语法解析错误。另外,函数体被单引号包裹,内部的单引号需要用两个连续单引号转义,这也是你代码里的潜在问题(比如'somevalue'会被解析为字符串截断)。
解决方案1:修正转义逻辑
直接去掉*前的\,同时将函数体内部的单引号替换为两个单引号:
CREATE OR REPLACE FUNCTION MY_DB.MY_SCHEMA.MYFUNCTION( "P_ONE" STRING, "P_TWO" STRING) RETURNS STRING LANGUAGE SQL AS ' select replace( replace(VALUE,''*'',''''), ''.txt'','''') from MY_DB.MY_SCHEMA.MY_TABLE where SUBJECT = ''somevalue'' '
解决方案2:使用ASCII值替代(即你提到的方案)
*的ASCII编码是42,可以用chr(42)表示目标字符,避免引号转义的麻烦:
CREATE OR REPLACE FUNCTION MY_DB.MY_SCHEMA.MYFUNCTION( "P_ONE" STRING, "P_TWO" STRING) RETURNS STRING LANGUAGE SQL AS ' select replace( replace(VALUE,chr(42),''''), ''.txt'','''') from MY_DB.MY_SCHEMA.MY_TABLE where SUBJECT = ''somevalue'' '
额外说明
Snowflake单引号字符串的规则:
- 表示单个单引号时,必须写两个连续的单引号(
'') - 除单引号外,普通字符(包括
*)无需额外转义
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

