我需要检查SQL Server 2012中是否为数字的列。
这是我的案例代码。
CASE WHEN ISNUMERIC(CUST_TELE) = 1 THEN CUST_TELE ELSE NULL END AS CUSTOMER_CONTACT_NO
但是,当'78603D99'达到该值时,它将返回1,这表示SQL Server将此字符串视为数字。
'78603D99'
1
这是为什么?
如何避免这类问题?
不幸的是,ISNUMERIC()SQL Server中的功能有许多怪癖。它并不完全是越野车,但很少能像人们初次使用它时所期望的那样。
ISNUMERIC()
但是,由于您使用的是SQL Server 2012,因此可以使用该TRY_PARSE()功能执行所需的操作。
TRY_PARSE()
这将返回NULL: SELECT TRY_PARSE('7860D399' AS int)
SELECT TRY_PARSE('7860D399' AS int)
这将返回7860399 SELECT TRY_PARSE('7860399' AS int)
SELECT TRY_PARSE('7860399' AS int)
https://msdn.microsoft.com/zh- CN/library/hh213126.aspx
显然,这也适用于其他数据类型INT。您说您想检查一个数值是否为数字,但我想您的意思是INT。
INT