postgres查询值包含反斜杠

时间:2017-04-09 20:33:35

标签: sql postgresql

我正在将数据库从MySql迁移到PostgreSql

我还有最后一件事:在表steps中有一列overlay_custom_css

customer_overlay_css中的数据示例: left:957px;\r\ntop:594px;\r\nwidth:68px;\r\nheight:30px;

我需要从此数据中删除\r\n。据我所知,\是一个特殊的字符,所以必须由另一个\

转义

源:https://www.postgresql.org/docs/8.3/static/functions-matching.html

这是我到目前为止所拥有的:

UPDATE
  steps
SET
  overlay_custom_css = REPLACE(overlay_custom_css,'\\r\\n','')
WHERE
  overlay_custom_css LIKE '%\\r\\n%';

在我运行之后它说它影响了200多行,但是查看我的数据并没有区别。

有谁能告诉我哪里出错了?

3 个答案:

答案 0 :(得分:1)

要使用C-style escapes,您需要使用E''

  

PostgreSQL还接受“转义”字符串常量,它是SQL标准的扩展。通过在开始单引号之前写入字母E(大写或小写)来指定转义字符串常量,例如E'foo'。 (当在行之间继续转义字符串常量时,仅在第一个开始引号之前写入E.)在转义字符串中,反斜杠字符()开始一个类似C的反斜杠转义序列,其中反斜杠和后续字符的组合(s )表示一个特殊的字节值,如表4-1所示。

所以它看起来像这样,

SELECT x, replace(x, E'\r\n', '')
FROM ( VALUES
  (E'foo\r\nbar')
) AS t(x);

答案 1 :(得分:1)

您可以使用regexp_replace

select regexp_replace(overlay_custom_css,'\\r\\n','','g')

答案 2 :(得分:0)

如果使用Laravel,请使用四转义符:

// querying for 'Foo\Bar'...
Model::where('foo', 'like', 'Foo\\\\Bar')->get()