如何在DuckDB中替换列特殊字符?正则替换失效解决
DuckDB正则替换特殊字符失效的解决方法
你的问题出在DuckDB的REGEXP_REPLACE默认只替换第一个匹配的特殊字符,而非全局替换所有匹配项。同时要注意SQL字符串中反斜杠的转义规则,修正后就能实现预期效果。
正确的SQL语句需添加全局替换标志'g':
UPDATE test SET State = REGEXP_REPLACE(State, '[^a-zA-Z0-9\\s]', ' ', 'g') WHERE State IS NOT NULL;
关键说明:
- 第四个参数
'g'表示全局替换,会将所有匹配到的非字母、数字、空白的字符替换为空格 - 正则中的
\\s是SQL字符串的转义写法,对应正则语法里的\s(匹配空格、制表符等空白字符)
如果需要适配Unicode字母(比如非英文的特殊字母),可以用更通用的正则规则:
UPDATE test SET State = REGEXP_REPLACE(State, '[^\\p{L}\\p{N}\\s]', ' ', 'g') WHERE State IS NOT NULL;
这里\\p{L}匹配任意Unicode字母,\\p{N}匹配任意Unicode数字,覆盖范围更广。
内容的提问来源于stack exchange,提问作者data en
相关产品推荐
相关产品推荐

