我有查询删除双倍空格并将其转换为单个空格。
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'.
答案 0 :(得分:3)
您正在运行旧版Postgres,设置为escape_string_warning = on
(默认)和standard_conforming_strings = off
(过时!,默认为on
,因为Postgres 9.1) 。 The manual:
escape_string_warning
(boolean
)启用时,如果普通中出现反斜杠(
\
),则会发出警告 字符串文字('...'
语法)和standard_conforming_strings
是off
。 默认值为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}',