ホームページ > データベース > mysql チュートリアル > SQL Server が WHERE 句の比較で末尾のスペースを無視するのはなぜですか?

SQL Server が WHERE 句の比較で末尾のスペースを無視するのはなぜですか?

Susan Sarandon
リリース: 2025-01-05 03:16:40
オリジナル
868 人が閲覧しました

Why Does SQL Server Ignore Trailing Spaces in WHERE Clause Comparisons?

SQL WHERE 句の比較における末尾のスペースの不一致

SQL Server では、= 演算子を使用した WHERE 句の比較で不一致が生じることがよくあります。困惑するでしょう。具体的には、文字列値の末尾のスペースは比較時に無視されます。この動作は予期したものから逸脱しており、予期しない結果が生じます。

デモの例

SQL Server 2008 の次の例を考えてみましょう。

SELECT '"' + ZoneReference + '"' AS QuotedZoneReference
FROM Zone
WHERE ZoneReference = 'WF11XU'
ログイン後にコピー

このクエリは、「Zone」というテーブルからデータを取得します。「ZoneReference」は主キー列です。クエリを実行すると、次の結果が返されます:

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

結果の値の末尾にスペースが追加されていることに注目してください。これは、比較基準に末尾のスペースが含まれていないにもかかわらずです。

不一致の原因

不一致は、SQL ANSI/ISO SQL が原因で発生します。 92 仕様、特にセクション 8.2 では、スペースを含む文字列比較の処理方法が規定されています。仕様に従って、SQL Server は比較を行う前に、長さが一致するように比較に使用される文字列をパディングします。これは、長さを揃えるために末尾のスペースが自動的に追加または削除されることを意味します。

結果への影響

ほとんどの場合、比較一致に末尾のスペースが含まれると、期待どおりの結果が得られます。結果。ただし、末尾のスペースが重要な値を比較すると、不正確または予期しない結果が生じる可能性があります。たとえば、スペースを含む完全一致を検索する場合、末尾のスペースが追加されると誤一致が発生する可能性があります。

解決策

問題を解決し、正確な比較を確実にするには、次の手順を実行します。 TRIM() 関数を使用して、比較に含まれる文字列から先頭または末尾のスペースを削除できます。これにより、パディングなしで完全一致が強制されます。

解決例

SELECT '"' + TRIM(ZoneReference) + '"' AS QuotedZoneReference
FROM Zone
WHERE TRIM(ZoneReference) = 'WF11XU'
ログイン後にコピー

例で示したように TRIM() 関数を使用すると、スペースを含む文字列の完全一致が保証されます。 .

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

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