SQL:如果field为空,则返回空字符串,否则转换为数字

时间:2016-04-19 20:32:45

标签: sql sql-server sql-server-2008 casting

我正在运行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。我觉得这应该是可能的,但我会疯狂地试图解决它!谢谢!

2 个答案:

答案 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