1

私は次の声明を持っています

SELECT * FROM foo
WHERE LEN(bar) = 4 AND CONVERT(Int,bar) >= 5000

bar正確に 4 文字の長さの値は整数です。他の値は整数ではないため、そのうちの 1 つを整数に変換しようとすると、変換例外がスローされます。

LEN(bar)を の前に置くだけで十分だと思いましたCONVERT(Int,bar) >= 5000。しかし、そうではありません。

特定のwhere句に優先順位を付けるにはどうすればよいですか? 私の例では、変換して比較する前に、長さが 4 のすべての値を選択したいと考えています。

4

2 に答える 2

2

6つの回答と5つが機能しない(SQL Serverの場合)...

SELECT *
  FROM foo
 WHERE CASE WHEN LEN(bar) = 4 THEN
       CASE WHEN CONVERT(Int,bar) >= 5000 THEN 1 ELSE 0 END
       END = 1;

WHERE / INNER JOIN条件は、クエリオプティマイザが最適であると判断した任意の順序で実行できます。短絡ブール評価はありません。

特にあなたの質問のために、あなたは4文字のデータが数字であることを知っているので、直接辞書式(テキスト)比較を行うことができます(はい、それは機能します):

SELECT *
  FROM foo
 WHERE LEN(bar) = 4 AND bar > '5000';
于 2012-12-03T07:47:04.127 に答える
0

これを試して

SELECT bar FROM 
(
SELECT  CASE
       WHEN LEN(bar) = 4 THEN   CAST( bar as int) 
       ELSE  CAST(-1 as int) END bar
FROM Foo
) Foo
WHERE bar>5000
于 2012-12-03T07:43:14.357 に答える