警告:在字符串文字中非标准地使用转义

时间:2016-09-23 12:10:42

标签: regex postgresql escaping

我有查询删除双倍空格并将其转换为单个空格。

UPDATE tablename SET name=trim(regexp_replace(name,'\s\s+',' ', 'g'));

它给出错误:

WARNING: nonstandard use of escape in a string literal
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.

2 个答案:

答案 0 :(得分:3)

您正在运行旧版Postgres,设置为escape_string_warning = on(默认)和standard_conforming_strings = off过时!,默认为on,因为Postgres 9.1) 。 The manual:

  

escape_string_warningboolean

     

启用时,如果普通中出现反斜杠(\),则会发出警告   字符串文字('...'语法)和standard_conforming_stringsoff。   默认值为on。 (...)

只需修复语法并删除WARNING

trim(regexp_replace(name, E'\\s\\s+', ' ', 'g'))

正确的解决方案:升级到Postgres的当前版本,或将过期的设置修复为standard_conforming_strings = on
在现代的Postgres中,你拥有的表达式是有效的。

准确地说,\s is the class shorthand for [[:space:]],其中包含任何white space(包括标签,等等)。您的表达式用一个空格char替换两个或多个空格char的任何字符串。符合您描述的表达式为:

trim(regexp_replace(name,'  +', ' ', 'g'))

...无论版本及以上设置如何都可以使用。

相关:

答案 1 :(得分:0)

以下也应该有效。

trim(regexp_replace(name,E'\s+','\s{2}',