我有这样的更新查询:
update table
set col = 'hello hi'
where col = 'hi hello'
但它没有更新值为'hi hello'
的列(hi
和hello
之间的多个空格)。有什么建议吗?
答案 0 :(得分:1)
如果需要使用不同数量的空格更新每一行,则需要使用此命令:
update table
set col = 'hello hi'
where col LIKE 'hi %hello'
%
是“任何字符,任意数量的重复”的占位符
答案 1 :(得分:1)
在Postgres中,您可以使用正则表达式:
update the_table
set col = 'hello hi'
where col ~ '^(hello)\s+(hi)$';
需要开头的^
和结尾的$
,以避免更新列中包含的行。 'here hello hi'
或'hello hi there'
如果在hello
之前或hi
之后可以有空格,那么您可以添加其他通配符:
update the_table
set col = 'hello hi'
where col ~ '^\s*(hello)\s+(hi)\s*$';
另一种选择是使用第一个正则表达式对列本身使用trim():
update the_table
set col = 'hello hi'
where trim(col) ~ '^(hello)\s+(hi)$';
有关正则表达式的更多详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/functions-matching.html
答案 2 :(得分:0)
避免使用通配符的问题
update table
set col = 'hello hi'
where LEFT(col, 3) = 'hi '
AND
RIGHT(col, 6) = ' hello'
AND
SUBSTRING(col, 3, LEN(col)-7) = REPLICATE(' ', LEN(col)-7)