嗨我有一個值,我想確保它只是在存儲過程中的數字。我有以下代碼檢查數字驗證
if (IsNumeric(myField) =0)
begin
--does some work
end;
應該檢查MyField的,如果數量爲非數字,如果不是,它只是繼續它的工作。 由於某些原因,上面的代碼拋出錯誤。任何想法如何解決這個問題。錯誤是該異常被引發varchar爲int。請讓我知道感謝
嗨我有一個值,我想確保它只是在存儲過程中的數字。我有以下代碼檢查數字驗證
if (IsNumeric(myField) =0)
begin
--does some work
end;
應該檢查MyField的,如果數量爲非數字,如果不是,它只是繼續它的工作。 由於某些原因,上面的代碼拋出錯誤。任何想法如何解決這個問題。錯誤是該異常被引發varchar爲int。請讓我知道感謝
檢查它像這樣代替:
if (IsNumeric(myField))
begin
--does some work
end;
-1這是不正確的TSQL語法。 'IsNumeric'是返回「0」或「1」的函數。它不返回可以像那樣使用的布爾結果。 –
你的表達是有效的,我懷疑你越來越被認爲是由功能的數字值,但不能轉換成整數。請嘗試以下...
declare @myfield varchar(20)
set @myfield='.'
if ISNUMERIC(@myfield)=1
begin
select CONVERT(int,@myField)
end
轉換語句將炸燬您所報告的錯誤...
檢查這個問題了: T-sql - determine if value is integer
「數字」的一些例子不能被轉換爲整數
select '1.e0',ISNUMERIC('1.e0') as IsNum
union
select '.',ISNUMERIC('.') as IsNum
union
select '12.31',ISNUMERIC('12.31') as IsNum
值在添加選擇查看引起錯誤發生的實際字段值
正如其他人指出的,isnumeric()
將在字符串無法轉換的情況下返回1。
爲正整數以下測試:
where myfield not like '%[^0-9]%'
爲正整數或浮點數以下測試:
where myfield not like '%[^0-9.]%' and myfield not like '%.%.%'
作爲一個說明,所有這些方法試驗的數值溢出。你可以用類似的東西來測試:
where myfield not like '%[^0-9]%' and len(myfield) <= 10 and myfield <= '2147483647'
(假設沒有前導0)。
你得到了什麼確切的錯誤? – Damith
@ojhawkins - ['ISNUMERIC'](http://technet.microsoft.com/en-us/library/ms186272.aspx)返回一個'int' –
你需要展示一些更相關的代碼。您向我們顯示的代碼不是引發錯誤的代碼。我們需要更多的上下文來看看你實際上在做什麼。 –