PostgreSQL 类似于操作符行为

标签 postgresql

我发现 PostgreSQL 类似于 operator works 有点奇怪。我不小心在下面的查询中检查了空格,但对结果感到惊讶。

选择类似于“%( )%”的“设备重新处理”——返回真 选择类似于“%()%”的“设备重新处理”——返回真 选择类似于 '%()%' 的 'DeviceReprocessing' --return true

为什么第二个和第三个查询返回 true?空模式总是返回 true 吗?

我对 SIMILAR TO 运算符的理解是返回 true 或 false,这取决于它的模式是否与给定的字符串匹配。

最佳答案

您定义了一个组,其中没有任何内容,这意味着任何内容都会匹配。我想您会发现任何匹配 %()% 的字符串,甚至是空字符串。

通常你会使用这个分组来列出选项:

select 'DeviceReprocessing' similar to '%(Davinci|Dog)%'

将返回 false,因为它既不包含“Davinci”也不包含“Dog”,但是:

select 'DeviceReprocessing' similar to '%(vice|Dog)%'

将返回 true,因为它确实包含至少一个选项。

您的第一个条件为真,因为表达式确实包含空格。

我实际上更喜欢不需要 % 通配符的正则表达式表示法:

select 'DeviceReprocessing' ~ 'vice|Dog'

关于PostgreSQL 类似于操作符行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47107489/

相关文章:

node.js - pg-promise 创建列错误

sql - 如何多重拆分字符串(WHERE IN 查询)

sql - LIMIT 优化查询

python - SQLAlchemy:如何过滤 PgArray 列类型?

node.js - 从 nodejs 调用 postgres 函数或存储过程的最佳/正确方法是什么

sql - 时间序列postgresql查询的交叉连接

xml - 如何在 Postgresql 中查询 XML 列?

postgresql - 为什么行级安全性 (RLS) 不使用索引?

SQL 如何限制 BOTTOM x 行 (PostgreSQL)

java - 为什么 JDBC 驱动程序将准备好的语句保持在连接级别?