wee*_*raa 12 sql sql-server-2012
我需要在SQL Server 2012中检查数字与否的列.
这是我的案例代码.
CASE
WHEN ISNUMERIC(CUST_TELE) = 1
THEN CUST_TELE
ELSE NULL
END AS CUSTOMER_CONTACT_NO
Run Code Online (Sandbox Code Playgroud)
但是当'78603D99'
达到该值时,它将返回1
,这意味着SQL Server将此字符串视为数字.
这是为什么?
如何避免这种问题?
Pau*_*gle 16
不幸的是,ISNUMERIC()
SQL Server中的函数有许多怪癖.它并不完全是错误的,但它很少会在人们第一次使用它时达到预期效果.
但是,由于您使用的是SQL Server 2012,因此您可以使用TRY_PARSE()
能够执行所需操作的功能.
这返回NULL:
SELECT TRY_PARSE('7860D399' AS int)
返回7860399
SELECT TRY_PARSE('7860399' AS int)
https://msdn.microsoft.com/en-us/library/hh213126.aspx
显然,这适用于除数据类型以外的数据类型INT
.你说你想检查一个值是数字,但我认为你的意思INT
.
尽管try_convert()
或try_parse()
适用于内置类型,但它可能无法完全满足您的要求。例如,它可能允许小数点,负号并限制数字的长度。
另外,isnumeric()
还将识别负数,小数和指数表示法。
如果只想测试数字字符串,则可以使用not like
逻辑:
(CASE WHEN CUST_TELE NOT LIKE '%[^0-9]%'
THEN CUST_TELE
END) AS CUSTOMER_CONTACT_NO
Run Code Online (Sandbox Code Playgroud)
这只是说不CUST_TELE
包含非数字字符。
归档时间: |
|
查看次数: |
21819 次 |
最近记录: |