我正在运行SQL Server 2008(否则,我将使用Try_Parse),并且在字段为非空的情况下,我需要将字段强制转换为数字。如果该字段为空,则应返回一个空字符串或NULL。我希望将字段存储为数字存储在数据库中,但是目前我无法控制该字段。

这是我尝试过的:
SELECT CASE WHEN AccountNumber='' THEN '' ELSE CAST(AccountNumber AS bigint) END AS AccountNumber FROM Accounts
要么
SELECT CASE WHEN CAST(AccountNumber AS bigint)=0 THEN '' ELSE CAST(AccountNumber AS bigint) END AS AccountNumber FROM Accounts
但是,这两者都会为空帐号带回0。我认为这应该是可能的,但是我会疯狂地试图解决它!谢谢!

最佳答案

您不能在同一列中同时选择数字和空字符串,因为它们是不兼容的类型。这就是将空字符串自动转换为0的原因。但是,NULL应该起作用。

SELECT CASE WHEN AccountNumber='' OR AccountNumber IS NULL THEN NULL
  ELSE CAST(AccountNumber AS bigint) END AS AccountNumber
FROM Accounts

10-08 04:37