PostgreSQL类似于运算符行为

时间:2017-11-04 04:48:08

标签: postgresql

我发现类似于运算符的PostgreSQL工作有点奇怪。我在下面的查询中不小心检查了空间,但对结果感到惊讶。

select 'Device Reprocessing' similar to '%( )%' --return true select 'Device Reprocessing' similar to '%()%' --return true select 'DeviceReprocessing' similar to '%()%' --return true

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

会返回false,因为它既不包含" Davinci"也不是" Dog",但是这个:

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

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

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

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

select 'DeviceReprocessing' ~ 'vice|Dog'