2017-02-20 19 views
0

私は整数の列を持つテーブルを持っています。 1000から1012までの12のレコードがあります。これらはintであることに注意してください。Postgres SQL - ORを使用したLIKEクエリと異なる結果

このクエリを返す、予想通り、12件の結果:

select count(*) from proposals where qd_number::text like '%10%' 

この場合と同様に:

SELECT COUNT(*) FROM "proposals" WHERE (lower(first_name) LIKE '%10%' OR qd_number::text LIKE '%10%') 

しかし、このクエリは2つのレコードを返します。

SELECT COUNT(*) FROM "proposals" WHERE (lower(first_name) || ' ' || qd_number::text LIKE '%10%') 

使用することを意味| |式がORを使用するのと等価でないところで連結されています。それは正しいのですか、私はここに何か他のものがありませんか?式はOR
を使用するのと同じでない場合連結で||を使用して

+0

[マニュアルの](https://www.postgresql.org/docs/current/static/index.html)で、 '||'が 'OR'と同等であるという主張が見つかりましたか? –

+0

私の質問では、マニュアルで主張されていることを述べましたか? – rmcsharry

+0

"*は、||がORを使用するのと同じではないことを暗示しています。*は、' '|| 'が' OR'になると思います。 –

答えて

4

おそらくfirst_nameにはnullがあります。これらのレコードの場合、(lower(first_name) || ' ' || qd_number::textの結果はnullになります。したがって、数字はもう見つからないようにします。

+0

ビンゴ、その理由は(私の上に||はORと同等だったと思っていましたが、今はそれが実際には文字列連結です!) – rmcsharry

2

が正しいか、私はここに何か他のものをしないのですということですか?

これは間違いありません。

||は、オペレータではなく、string concatenation operator in SQLです。

関連する問題