2011-09-09 74 views
0

我使用here的最高投票答案來檢查單元格值是否爲整數。但我也需要對它進行範圍檢查。Sql解析列爲int,並檢查它是否在範圍內

SELECT * FROM Table 
WHERE (dbo.IsInteger(FieldName) = 1) AND FieldName > 400 AND FieldName < 500 

但是這會返回轉換錯誤,因爲列中的一些單元格包含文本。那麼,是否有可能獲得一個子集,這只是IsInteger查詢的結果,然後對結果進行範圍檢查?

回答

3

您需要將其包裝在CASE表達式中。我已經稍微改變了這個查詢來使用BETWEEN來避免重複表達。

SELECT * FROM Table 
WHERE CASE WHEN dbo.IsInteger(FieldName) = 1 
      THEN FieldName END BETWEEN 401 AND 499 

表達的結果將是NULLdbo.IsInteger(FieldName) <> 1這將不匹配BETWEEN謂詞。

當然這是完全不可糾正的,但您的原始查詢也是如此。

相關問題