我尝试在表中的一个字段中将字符串值转换为int,但仅在该值存储可以转换为int的值的情况下(在另一种情况下,必须返回原始值)。例如:SQL Server 2014:只有在值可以被转换的情况下如何将字符串值转换为int值?
DECLARE @ErrorCode nvarchar(1024)
SET @ErrorCode = 'a10'
SELECT IIF(TRY_CAST(@ErrorCode AS int) IS NULL, @ErrorCode, CAST(@ErrorCode AS int))
我在StackOverflow上看到过类似的代码。
我的问题是,SQL Server(2014)似乎没有短路,并且始终执行转换,即使TRY_CAST(@ErrorCode AS int)
结果为NULL
。上面的代码的结果是错误“将nvarchar值'a10'转换为数据类型int时转换失败。”
我也试过其它变体,相同的结果:
SELECT CASE WHEN TRY_CAST(@ErrorCode AS int) IS NULL THEN @ErrorCode ELSE (SELECT CAST(@ErrorCode AS int)) END
SELECT CASE TRY_CAST(@ErrorCode AS int) WHEN 1 THEN CAST(@ErrorCode AS int) ELSE @ErrorCode END
我怎样才能实现我的目标(避免情况下@ErrorCode值不能被铸造铸)?
你可以用'ISNUMERIC()'函数检查是否可以解析字符串 – Petaflop
显示一些示例数据。我在这里看到的问题是,一列只能有1种类型。所以想要返回一个int,如果它是一个int或另一个类型在同一列不会工作。你打算如何处理这个问题? – Tanner
我不是MS SQL Server的专家,但是我会检查这个值是否与正则表达式相同,如果它只包含数字,然后它被转换为int。 –