Bru*_*uce 23 sql t-sql sql-server sql-server-2008
我有以下代码将nvarchar转换为整数:
cast(@value as int)
Run Code Online (Sandbox Code Playgroud)
但是我无法控制参数@value,因此代码可能会失败.无论如何,在进行演员表演之前是否可以检查演员表是否可行?
Mat*_*att 27
好吧,在SQL Server 2012中,您可以使用新的TRY_CAST(),但是对于SQL Server 2008,您应该能够使用ISNUMERIC(),然后包含对未通过该测试的值的处理.
sge*_*des 11
我最近回答了一个关于这个问题的问题,并且使用ISNUMERICto CASTto a INTwill本身不起作用.原因是,例如,ISNUMERIC对于非整数(1.5),返回true.
这是最近关于这个主题的答案:
考虑使用CHARINDEX和ISNUMERIC添加额外的检查,或者我更喜欢,使用正则表达式来验证数据.
这里有一个小提琴演示了自己使用ISNUMERIC的问题.并且小提琴使用正则表达式而不是有效.
DECLARE @Test nvarchar(10)
SET @Test = '1.5'
--Works
SELECT CASE WHEN @Test NOT LIKE '%[^0-9]%' THEN CAST(@Test as int) ELSE 0 END
-- Produces Error
SELECT CASE WHEN ISNUMERIC(@Test) = 1 THEN CAST(@Test as int) ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
祝好运.
我一般使用以下内容,似乎涵盖了所有情况.
SELECT CASE WHEN 1 = ISNUMERIC(@value + '.0') THEN CAST(@value as int) ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
它利用了"ISNUMERIC"不允许两个时期的事实.SQL Server 2012+中的"TRY_CAST"是一个更好的解决方案.
| 归档时间: |
|
| 查看次数: |
41928 次 |
| 最近记录: |