2009-07-15 5 views
1

Я натыкаюсь на некоторые null полей в SQL2005 db.SQL-преобразование Текстовые поля

Некоторый отчет Null и другие значения имеют значения 1.00 или 713.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

1

Вы можете конвертировать из null с помощью функции coalesce:

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

Чтобы отлиты из текста денег и обрабатывать аннулирует, попробуйте следующее:

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

См COALESCE и CAST для деталей.

Альтернатива, когда все сложнее, это CASE..WHEN.

0

Я не уверен, что производительность будет как, но 2005 введены типы данных varchar(MAX) и nvarchar(MAX) (в том числе, как varbinary(MAX). Это настоящие VARCHARS и nvarchars, и может быть использован в любом месте, где они могли бы (например, Преобразование), но и обладают способностью Text и Image полей. В самом деле, Text и Image типы фактически не рекомендуется, так идти вперед рекомендуется использовать новые типы.

это, как говорится, вы могли бы просто использовать это:

convert(Money, coalesce(text_column_name, 0)) 
Смежные вопросы