2017-11-04 5 views
0

PostgreSQLはオペレータの仕事と似ていますが少し奇妙です。私は誤って以下のクエリでスペースをチェックしましたが、結果に驚いていました。PostgreSQLはオペレータの動作に似ています

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

2番目と3番目のクエリがtrueを返すのはなぜ?空のパターンは常にtrueを返しますか?

私がSIMILAR TO演算子について理解していることは、そのパターンが指定された文字列と一致するかどうかによってtrueまたはfalseを返します。

+1

'類似TO'を使用してにはポイントがありません。これまで代わりに 'LIKE'や正規表現を使用します。 https://stackoverflow.com/questions/12452395/difference-between-like-and-in-postgres/12459689#12459689 –

答えて

2

何も含まれていないグループを定義しました。これは、一致するものがあることを意味します。私は%()%と一致する文字列、空の文字列を見つけることができると思います。それはどちらも「ダヴィンチ」や「犬」が含まれているので

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

はfalseを返しますが、これは::

通常はそれほどオプションを一覧表示するには、このグループを使用することになり

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

trueを返します少なくとも1つのオプションが含まれているためです。

最初の条件は、式にスペースが含まれているため、trueです。

は、私が実際に%ワイルドカードを必要としない正規表現表記を好む:

select 'DeviceReprocessing' ~ 'vice|Dog' 
関連する問題