2009-07-15 73 views
1

我碰到SQL2005數據庫中的一些null字段。SQL轉換文本字段

一些報告Null和其他有像1.00713.00值。
我想要一個防彈的方式來將'空'轉換爲0,將'1.00'和'713.00'的值轉換爲Money類型。

回答

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,但您可以輕鬆更改該行爲。

+0

工作完美..謝謝。 – madcolor 2009-07-15 18:00:35

1

您可以從null通過​​3210功能轉換:

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

從文本轉換爲金錢和處理空值,試試這個:

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

詳見COALESCECAST

當事情更復雜時,另一種選擇是CASE..WHEN

0

我不知道性能將是什麼樣的,但在2005年推出了varchar(MAX)nvarchar(MAX)數據類型(其中包括像varbinary(MAX)。這是真正的VARCHAR處理和nvarchars,並且可以在任何地方使用,他們可以(像轉換),但也有TextImage領域的能力。事實上,TextImage類型實際上棄用,因此,展望未來我們建議您使用新的類型。

話雖這麼說,你可以只使用這個:

convert(Money, coalesce(text_column_name, 0))