我发现 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/