2011-12-10 105 views
0

以下內容類似於我需要將字段轉換爲類型並對其進行求值的查詢,並且我希望忽略具有無法轉換爲目標數據類型的數據的行。有沒有更好的方法來編寫這個查詢來短路第二個條件?

select * from MyTable 
where case when isnumeric(SomeField) = 1 then SomeField else null end > 1 

所以在上面的例子中,我能夠測試值大於一,同時避免,如果有在SomeField任何非數字字段將導致轉換錯誤。我對這個解決方案沒問題,但我只是想知道是否有更好的方法來做到這一點?

+3

您是否有權控制輸入到此數據庫的數據?只是好奇爲什麼你必須擔心數據類型的開始。 –

+0

這是一個將數據從csv文件導入sql表的應用程序。因此,我會根據目標字段的數據類型以及hilite datagridview中的記錄來檢查源字段中是否存在任何無效數據(將被截斷,數字字段中的字符數據等)用戶可以在導入之前進行調整。 –

+0

但是,如果我是根據我提供的信息閱讀你的回覆,我也會贊成它:)好吧,無論如何,我會放棄它,因爲它是常識,但不幸的是不能在這種情況下應用它。 –

回答

1

我得出結論,沒有更好的方法來做到這一點。

1

我收到一條錯誤「超出最大整數值」在查詢中使用where標準。雖然,我的數據庫中有一些非常大的數字,但這可能不適合你。

,處理大量的備選列表如下:

where isnumeric(SomeField) = 1 and convert(numeric(18,0),SomeField) > 1 

ISNUMERIC()檢查必須來之前的()轉換

表現明智,他們大致相同。

+0

雖然你不能阻止sql在isnumeric()函數之前運行convert()函數,但如果它不能轉換,它會拋出一個我想要避免的錯誤。我的數據庫中沒有特別龐大的數字,但無論如何,我會給你+1,以引起我注意到數字的大小限制。 –

相關問題