3

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

给我包含“/”的值的数量

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

4

5 回答 5

8
SELECT  count(*)
FROM    table
WHERE   column ILIKE '%\\\\%';
于 2009-04-01T16:39:03.177 回答
4

文档摘录:

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

于 2009-04-01T16:37:02.137 回答
3

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

select count(*)  from table where 0 < position( E'\\' in column );
于 2009-04-01T18:34:00.267 回答
1

我在 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'//' 似乎工作(即解析)但实际上并没有找到斜线。

于 2021-07-09T08:21:39.633 回答
0

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

查看文档

于 2009-04-01T16:53:09.073 回答