=演算子はT-SQLであり、「式のコンテキストの照合によると、同じ単語/フレーズである」ほど「等しい」ものではなく、LENは「単語/フレーズの文字数」です。照合では、末尾の空白をその前の単語/句の一部として扱いません(ただし、先頭の空白を前の文字列の一部として扱います)。
'this'と 'this'を区別する必要がある場合は、 'this'と 'this'が同じ単語であるため、 "are the same word orphrase"演算子を使用しないでください。
=の動作に貢献しているのは、文字列等価演算子は引数の内容と式の照合コンテキストに依存する必要があるという考えですが、両方が文字列タイプである場合は、引数のタイプに依存しないでください。 。
「これらは同じ単語です」という自然言語の概念は、通常、=のような数学演算子で取得できるほど正確ではなく、自然言語には文字列タイプの概念はありません。コンテキスト(つまり、照合)は重要であり(そして自然言語で存在し)、ストーリーの一部であり、追加のプロパティ(風変わりに見えるものもあります)は、の不自然な世界で明確に定義するために=の定義の一部です。データ。
タイプの問題では、単語が異なる文字列タイプに格納されているときに単語を変更したくないでしょう。たとえば、タイプVARCHAR(10)、CHAR(10)、およびCHAR(3)はすべて、単語「cat」および?の表現を保持できます。= 'cat'は、これらのタイプのいずれかの値が単語 'cat'を保持するかどうかを決定できるようにする必要があります(大文字と小文字およびアクセントの問題は照合によって決定されます)。
JohnFxのコメントへの応答:
BooksOnlineでのcharおよびvarcharデータの使用を参照してください。そのページから引用して、私の強調:
各charおよびvarcharデータ値には照合順序があります。照合順序は、各文字を表すために使用されるビットパターンなどの属性を定義します。
比較規則、大文字と小文字またはアクセントに対する感度。
見つけやすいかもしれないことに同意しますが、文書化されています。
また、注目に値するのは、SQLのセマンティクス(=は実際のデータと関係があり、比較のコンテキスト(コンピューターに格納されているビットに関するものとは対照的)は長い間SQLの一部であったことです。RDBMSとSQLの前提は、実世界のデータを忠実に表現することです。したがって、同様のアイデア(CultureInfoなど)がAlgolのような言語の領域に入る何年も前に、照合をサポートします。これらの言語の前提は(少なくともごく最近まで)、ビジネスデータの管理ではなく、エンジニアリングにおける問題解決でした。(最近、検索などの非エンジニアリングアプリケーションで同様の言語を使用することで、ある程度の浸透が見られますが、Java、C#などは依然として非ビジネスのルーツに苦しんでいます。)
私の意見では、SQLが「ほとんどのプログラミング言語」とは異なると批判するのは公平ではありません。SQLは、エンジニアリングとは大きく異なるビジネスデータモデリングのフレームワークをサポートするように設計されているため、言語が異なります(そしてその目標に適しています)。
ちなみに、SQLが最初に指定されたとき、一部の言語には組み込みの文字列型がありませんでした。また、一部の言語では、文字列間のequals演算子は文字データをまったく比較しませんが、参照を比較します。さらに10年か2年後に、==が文化に依存するという考えが標準になったとしても、私は驚かないでしょう。