4

今まで見たことのない状況に出くわしました。誰かが次のことを説明してくれることを願っています。

次のクエリを実行しました。値が正確に等しい列の結果のみを取得することを望んでいます。1101

select '--' + MyColumn + '--' SeeSpaces, Len(MyColumn) as LengthOfColumn 
from MyTable 
where MyColumn = '1101'

1101ただし、 (私が信じている)スペースが後に続く値も表示されます。

だからSeeSpaces戻ります

--1101    --

そしてLengthOfColumn戻ります4

MyColumnVARCHAR(8), NOT NULL列です。その値(スペースを含む)は、別のワークフローを介して挿入されます。

この選択が正確な結果だけを返さないのはなぜですか?

前もって感謝します

4

2 に答える 2

1

その理由は、SQLサーバーが文字列を末尾のスペースと比較する方法に関係しているためです。これはANSI規格に準拠しているため、文字列「1101」と「1101」は同等です。

詳細については、以下を参照してください。

INF:SQLServerが文字列と末尾のスペースを比較する方法

于 2013-03-06T13:03:39.243 に答える
0

私はあなたが次LTRIM() and RTRIM()のように比較しながら関数を使用する必要があると思います:

LTRIM(RTRIM(MYCOLUMN))='1101' 

またLEN、関数はスペースをカウントせず、文字列内の文字のみをカウントします。参照してください:http : //msdn.microsoft.com/en-us/library/ms190329%28SQL.90%29.aspx

于 2013-03-06T12:58:03.327 に答える