ホームページ > データベース > mysql チュートリアル > SQL Server の「WHERE」句は文字列比較で末尾のスペースを無視しますか?

SQL Server の「WHERE」句は文字列比較で末尾のスペースを無視しますか?

Linda Hamilton
リリース: 2025-01-05 01:48:38
オリジナル
1035 人が閲覧しました

Does SQL Server's `WHERE` Clause Ignore Trailing Spaces in String Comparisons?

SQL WHERE 句: 値の一致における末尾のスペース

SQL Server では、WHERE 句を使用した文字列比較で特有の動作が発生し、次のような問題が発生する可能性があります。予想外の結果に。具体的には、等価演算子 (=) は、比較を実行するときに末尾のスペースを無視します。

次のシナリオを考えてみましょう:

  • Zone という名前のテーブルが存在し、varchar 型の ZoneReference という主キー列が存在します。 (50) NOT NULL 制約付き。
  • ZoneReference 値の QuotedZoneReference 値を選択するクエリが実行されます。 'WF11XU':
select '"' + ZoneReference + '"' as QuotedZoneReference
from Zone
where ZoneReference = 'WF11XU'
ログイン後にコピー

驚くべきことに、クエリは次の結果を返します:

"WF11XU "
ログイン後にコピー

説明:

この動作これは SQL-92 仕様に由来しており、比較演算では文字列をパディングする必要があると規定されています。比較する前に同じ長さであることを確認するためにスペースを入れます。この場合、WHERE 句の ZoneReference 値 ('WF11XU') の末尾にスペースが埋め込まれ、テーブル内の値と一致します。

影響:

このパディングにより、末尾にスペースが含まれる可能性のある値を正確に一致させようとすると問題が発生する可能性があります。たとえば、意図した ZoneReference 値が実際には末尾のスペースのない「WF11XU」である場合、クエリは結果を返しません。

解決策:

正確な一致を保証するには、次のようにします。次の解決策を検討してください。

  • TRIM() 関数を使用して、両方の文字列から末尾のスペースを削除します。 WHERE 句の値とテーブル列の値。
  • nvarchar(50) など、末尾のスペースを許可しないデータ型に文字列を明示的にキャストします。
  • SQL Server の照合設定を調整します。大文字と小文字とスペースが区別され、末尾のスペースが無視されなくなります。

以上がSQL Server の「WHERE」句は文字列比較で末尾のスペースを無視しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート