0
该查询返回任何行:是这个postgres正则表达式相当于这个表达式吗?
SELECT * FROM t WHERE t.s ~ '^(N_|B_).*'
,而这其中确实
SELECT * FROM t WHERE t.s like 'N_%' or t.s like 'B_%';
他们为什么不相同呢?
该查询返回任何行:是这个postgres正则表达式相当于这个表达式吗?
SELECT * FROM t WHERE t.s ~ '^(N_|B_).*'
,而这其中确实
SELECT * FROM t WHERE t.s like 'N_%' or t.s like 'B_%';
他们为什么不相同呢?
下划线字符在LIKE
特殊的意义,为the documentation:
在图案的下划线(_)代表(匹配)任何单个字符;百分号(%)匹配零个或多个字符的任何序列。 (...)要匹配文字下划线或百分号而不匹配其他字符,模式中的相应字符必须以转义字符开头。
所以这些查询是等价的:
SELECT * FROM t WHERE t.s ~ '^(N_|B_).*';
SELECT * FROM t WHERE t.s like 'N\_%' or t.s like 'B\_%';