我碰到了SQL2005数据库中的一些null
字段。
某些报告Null
和其他报告的值为1.00
或713.00
我想要一种防弹方式将'Null'转换为0,将'1.00'和'713.00'值转换为Money
类型。
答案 0 :(得分:1)
您可以通过null
功能转换coalesce
:
coalesce(a, b) //returns b if a is null, a otherwise
答案 1 :(得分:1)
答案 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,以及可以在任何可以使用的地方使用(比如转换),但也可以使用Text
和Image
字段。事实上,Text
和Image
类型是实际上已弃用,因此建议您使用新类型。
话虽如此,你可以使用它:
convert(Money, coalesce(text_column_name, 0))