我正在运行SQL Server 2008(否则我会使用Try_Parse)并且我需要在非空的情况下将字段转换为数字。如果该字段为空,则应返回空字符串或NULL。我希望如果该字段存储为数据库中的数字,但我目前无法控制该字段。
以下是我的尝试:
SELECT CASE WHEN AccountNumber='' THEN '' ELSE CAST(AccountNumber AS bigint) END AS AccountNumber FROM Accounts
OR
SELECT CASE WHEN CAST(AccountNumber AS bigint)=0 THEN '' ELSE CAST(AccountNumber AS bigint) END AS AccountNumber FROM Accounts
但是这两个都为空帐号带来了0。我觉得这应该是可能的,但我会疯狂地试图解决它!谢谢!
答案 0 :(得分:6)
您不能同时在同一列中选择数字和空字符串,因为它们是不兼容的类型。这就是为什么空字符串会自动转换为0.然而,NULL应该可以工作。
SELECT CASE WHEN AccountNumber='' OR AccountNumber IS NULL THEN NULL
ELSE CAST(AccountNumber AS bigint) END AS AccountNumber
FROM Accounts
答案 1 :(得分:1)
您可以使用ISNUMERIC功能:
SELECT CASE WHEN ISNUMERIC(AccountNumber) = 1 THEN CAST(AccountNumber AS BIGINT) ELSE NULL END
FROM Accounts