5

私はvarcharである列名を持っています

名前が空の文字列であるすべての結果をフィルタリングしたい...

 select name 
 from tblNames
 where name <> ''

私がやりたいことは次のとおりです。

 select name 
 from tblNames
 where Ltrim(RTrim(name)) <> ''

where句の名前にトリムを適用したいのですが、where句内の関数のパフォーマンスの問題に言及している記事をいくつか読みました

パフォーマンスを損なうことなくこれを解決したい

4

3 に答える 3

13

SQL-Server の標準的な動作は、

'      ' = ''

TRUE、末尾のスペースが無視されるためです。MSDN サポートから:

SQL Server は、文字列をスペースと比較する方法について、ANSI/ISO SQL-92 仕様 (セクション 8.2、一般規則 #3) に従います。ANSI 標準では、比較に使用する文字列を比較する前に長さが一致するように、文字列のパディングが必要です。WHEREパディングは、 andHAVING句の述語やその他の Transact-SQL 文字列比較のセマンティクスに直接影響します。たとえば、Transact-SQL では、ほとんどの比較操作で文字列'abc''abc '同等であると見なされます。

この規則の唯一の例外は、LIKE述語です。...

したがって、条件WHERE name <> ''は正常に機能し、スペースのみの文字列を含めないでください。

于 2012-04-11T19:40:47.747 に答える
4

トリミングされたデータのみがフィールドに入るという制約を作成できます。

に索引を作成できますLTRIM(RTRIM(name))。SQL はそれを使用するのに十分賢いかもしれません。

という計算フィールドをLTRIM(RTRIM(name))作成し、そのフィールドにインデックスを付けて、そのフィールドをクエリで使用できます。

于 2012-04-11T19:14:24.530 に答える