SQL преобразование текстовых полей - PullRequest
1 голос
/ 15 июля 2009

Я сталкиваюсь с некоторыми null полями в базе данных SQL2005.

Некоторые отчеты Null, а другие имеют значения, такие как 1.00 или 713.00.
Я хотел бы, чтобы пуленепробиваемый способ преобразовал значения 'Null's в 0 и' 1.00 'и' 713.00 'в типы Money.

Ответы [ 4 ]

1 голос
/ 15 июля 2009
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, но вы можете легко изменить это поведение.

1 голос
/ 15 июля 2009

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

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

Подробнее см. COALESCE и CAST.

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

1 голос
/ 15 июля 2009

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

coalesce(a, b) //returns b if a is null, a otherwise
0 голосов
/ 15 июля 2009

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

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

convert(Money, coalesce(text_column_name, 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...