-1

acct_id CHAR(3)とのようなクエリがある場合

select * from some_table where acct_id like '12%3%';

ほとんどのリレーショナルデータベースはこのクエリを受け入れますか、それとも列よりも長い値を比較しているために失敗するものがありますか?

言い換えると、where句が列の制限を超えた場合、このクエリは一般的なデータベース(MySql、DB2、Oracleなど)間で移植可能ですか?

また、=比較の代わりに同じことが当てはまりLIKEますか?

DB2(x86およびメインフレーム)でクエリを試しましたが、エラーは発生しませんでしたが、他のデータベースについてはよくわかりませんでした。送信する前に、いくつかのSO質問のタイトルを確認しました。

4

2 に答える 2

3

一致するCHAR(3)列にある唯一の値はです'123'が、%演算子は0回以上の繰り返しをサポートします。テストが拒否される理由はありません。

実際、比較することもできWHERE acct_id = '1234'、洗練されたオプティマイザーは、それに匹敵する値はないことに気づき、用語をfalseとして扱う可能性があります。これを「無効なSQL」として拒否する必要がある明確な理由はありません。それは劇的な最適化のチャンスにすぎません。

于 2013-03-22T20:11:24.350 に答える
0

コメントの@MarcinJuraszekに感謝します。SQLフィドルについて知っており、試してみた各DBで機能しました。

  • MySQL 5.5.30
  • Oracle 11g R2
  • PostgreSQL 9.2.1
  • SQLite
  • MS SQL Server 2012
  • MS SQL Server 2008

さらに、DB2Express-C9.7.5とDB2onz / OS(メインフレーム)9.1で試してみましたが、両方で機能しました。

于 2013-03-22T20:30:37.440 に答える