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

SQL:如果字段为空,则返回空字符串,否则强制转换为数字,sql,sql-server,sql-server-2008,casting,Sql,Sql Server,Sql Server 2008,Casting,我正在运行SQLServer2008(否则我将使用Try_Parse),如果字段不为空,我需要将其转换为数字。如果字段为空,则应返回空字符串或NULL。我更希望该字段作为一个数字存储在数据库中,但此时我无法控制它 以下是我尝试过的: 当AccountNumber=''时选择CASE,然后选择“”否则强制转换(AccountNumber为bigint)结束为AccountNumber FROM Accounts 或 选择CASE WHEN CAST(AccountNumber作为bigint)=0

我正在运行SQLServer2008(否则我将使用Try_Parse),如果字段不为空,我需要将其转换为数字。如果字段为空,则应返回空字符串或NULL。我更希望该字段作为一个数字存储在数据库中,但此时我无法控制它

以下是我尝试过的:

当AccountNumber=''时选择CASE,然后选择“”否则强制转换(AccountNumber为bigint)结束为AccountNumber FROM Accounts

选择CASE WHEN CAST(AccountNumber作为bigint)=0,然后选择“”ELSE CAST(AccountNumber作为bigint)结束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

您可以使用ISNUMERIC函数:

SELECT CASE WHEN ISNUMERIC(AccountNumber) = 1 THEN CAST(AccountNumber AS BIGINT) ELSE NULL END
FROM Accounts

我认为这是我所希望的最好的解决方案!我知道我很接近。谢谢