PostgreSQL - 如何检查我的数据是否包含反斜杠

时间:2009-04-01 16:33:17

标签: postgresql backslash

SELECT count(*)FROM table WHERE column ilike'%/%';

给出了包含“/”

的值的数量

如何为“\”做同样的事情?

5 个答案:

答案 0 :(得分:8)

SELECT  count(*)
FROM    table
WHERE   column ILIKE '%\\\\%';

答案 1 :(得分:4)

摘自docs

  

请注意,反斜杠在字符串文字中具有特殊含义,因此要编写包含反斜杠的模式常量,必须在SQL语句中写入两个反斜杠(假设使用了转义字符串语法,请参见第4.1.2.1节)。因此,编写实际匹配文字反斜杠的模式意味着在语句中写入四个反斜杠。您可以通过使用ESCAPE选择不同的转义字符来避免这种情况;那么反斜杠对于LIKE来说并不特别。 (但它对于字符串文字解析器仍然是特殊的,所以你仍然需要其中两个。)

答案 2 :(得分:3)

更好 - 不要使用,只需使用标准位置:

select count(*) from from table where 0 < position( E'\\' in column );

答案 3 :(得分:0)

您需要E'\\\\'因为LIKE的参数是正则表达式而且正则表达式转义字符已经是\(例如~ E'\\w'将匹配包含可打印字符的任何字符串)。

请参阅doc

答案 4 :(得分:0)

我在 12.5 上发现我不需要转义符

# select * from t;
  x  
-----
 a/b
 c\d
(2 rows)

# select count(*) from t where 0 < position('/' in x);
 count 
-------
     1
(1 row)

# select count(*) from t where 0 < position('\' in x);
 count 
-------
     1
(1 row)

而在 9.6 上我做到了。

有点奇怪,但你去了。 有用,

position(E'/' in x)

在两个版本上都适用。 您需要小心 - E'//' 似乎有效(即解析),但实际上并没有找到斜线。