SQL转换文本字段

时间:2009-07-15 17:32:04

标签: sql sql-server-2005 tsql casting

我碰到了SQL2005数据库中的一些null字段。

某些报告Null和其他报告的值为1.00713.00 我想要一种防弹方式将'Null'转换为0,将'1.00'和'713.00'值转换为Money类型。

4 个答案:

答案 0 :(得分:1)

您可以通过null功能转换coalesce

coalesce(a, b) //returns b if a is null, a otherwise

答案 1 :(得分:1)

要从文本转换为金钱并处理空值,请尝试以下操作:

CAST(COALESCE(column, '0') AS MONEY)

有关详细信息,请参阅COALESCECAST

当事情变得更复杂时,另一种选择是CASE..WHEN

答案 2 :(得分:1)

CREATE TABLE dbo.Test_Text_Convert
(
     my_string     TEXT     NULL
)
GO
INSERT INTO dbo.Test_Text_Convert VALUES (NULL)
INSERT INTO dbo.Test_Text_Convert VALUES ('7.10')
INSERT INTO dbo.Test_Text_Convert VALUES ('xxx')
INSERT INTO dbo.Test_Text_Convert VALUES ('$20.20')
INSERT INTO dbo.Test_Text_Convert VALUES ('20.2020')
GO

SELECT
     CASE
          WHEN ISNUMERIC(CAST(my_string AS VARCHAR(MAX))) = 1
               THEN CAST(ISNULL(CAST(my_string AS VARCHAR(MAX)), '0') AS MONEY)
          ELSE 0
     END
FROM
    dbo.Test_Text_Convert
GO

我将无效字符串设置为0,但您可以轻松更改该行为。

答案 3 :(得分:0)

我不确定性能会是什么样的,但2005年引入了varchar(MAX)nvarchar(MAX)数据类型(其中包括varbinary(MAX)。这些是真正的varchars和nvarchars,以及可以在任何可以使用的地方使用(比如转换),但也可以使用TextImage字段。事实上,TextImage类型是实际上已弃用,因此建议您使用新类型。

话虽如此,你可以使用它:

convert(Money, coalesce(text_column_name, 0))