web-dev-qa-db-ja.com

SQLで文字列を比較するには '='またはLIKEを使いますか。

SQLステートメント内の文字列を比較するためにLIKEまたは '='を使用する必要がある場合は、(ほとんど宗教的な)議論があります。

  • LIKEを使用する理由はありますか?
  • '='を使用する理由はありますか?
  • パフォーマンス?読みやすさ?
150
guerda

パフォーマンスの違いを確認するには、これを試してください。

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name = B.name

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name LIKE B.name

文字列と '='を比較するほうがはるかに高速です。

118
Techmaddy

LIKEと等号演算子は目的が異なりますが、同じことはしません。
=ははるかに高速ですが、LIKEはワイルドカードを解釈できます。可能であれば=を、必要なところでLIKEを使用してください。

SELECT * FROM user WHERE login LIKE 'Test%';

サンプルの一致:

TestUser1
TestUser2
TestU
テスト

178
soulmerge

私の小さな経験では:

完全一致の場合は "="。

部分一致の「LIKE」.

32
Stu Andrews

Postgresが文字列マッチングのために提供しているトリックは他にもいくつかあります(それがあなたのDBである場合)

ILIKE、大文字と小文字を区別しないLIKEの一致:

select * from people where name ilike 'JOHN'

一致します。

  • ジョン
  • ジョン
  • ジョン

あなたが本当に怒りたいのなら、正規表現を使うことができます。

select * from people where name ~ 'John.*'

一致します。

  • ジョン
  • ジョナソン
  • ジョニー
12
Ceilingfish

頭が上になるのと同じように、 '='演算子はTransact-SQLでは文字列をスペースで埋めます。そのため'abc' = 'abc 'はtrueを返します。 'abc' LIKE 'abc 'はfalseを返します。ほとんどの場合、 '='が正しいでしょうが、最近の私の場合は違いました。

そのため、 '='のほうが速いのですが、LIKEはあなたの意図をより明確に述べているかもしれません。

http://support.Microsoft.com/kb/316626

9
Philip H

パターンマッチングにはLIKEを使用してください。完全一致=の場合.

7
Techmaddy

パフォーマンスが遅くても "like"を使用するもう1つの理由があります。文字値は比較時に暗黙的に整数に変換されるため、

@transid varchar(15)を宣言する

@transid!= 0の場合

「varchar値の変換 '123456789012345'がint列をオーバーフローしました」というエラーが表示されます。

3
Uniotter

シェルでは、ワイルドカードのchar [*、?]のようにLIKEが一致します。
LIKE '%suffix' - サフィックスで終わるすべてのものを教えてください。あなたはそれができませんでした=
実際に事件によります。

3
Gishu