Пустая строка должна быть NULL при конвертации в float - PullRequest
0 голосов
/ 12 июня 2018

Рассмотрим следующий код TSQL:

declare @a nvarchar(500) = N''
select try_convert(float, @a)

Вывод:

0

Мне нужно, чтобы вывод был NULL.

Я могу сделать это:

declare @a nvarchar(500) = N''
select case @a
           when '' then null
           else try_convert(float, @a)
       end

и все работает просто отлично.

Однако это всего лишь макет.В моем реальном сценарии вместо @a имеется более 200 NVARCHAR(500) столбцов, либо с плавающей запятой, либо с нулевой длиной строки.Мне нужен быстрый способ преобразования строк нулевой длины в NULL (и все остальное для перемещения), возможно, без необходимости создавать 200 отдельных операторов CASE.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Мне не очень приятно полагаться на довольно необъяснимые различия между try_parse() и try_convert() / try_cast().Вместо этого я бы выбрал:

try_convert(float, nullif(@a, ''))

Это также имеет преимущество в том, что вы достаточно четко указали, что вы пытаетесь достичь.

0 голосов
/ 12 июня 2018

Вместо этого следует использовать Try_parse

declare @a nvarchar(500) = N''
select try_parse( @a as float)

возвращает

NULL

См. Рабочую демонстрацию

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