SELECT count(*)FROM table WHERE column ilike'%/%';
给出了包含“/”
的值的数量如何为“\”做同样的事情?
答案 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'//' 似乎有效(即解析),但实际上并没有找到斜线。