SQL Server: приведение типа столбца - PullRequest
0 голосов
/ 24 августа 2011

SQL Server 2005/2008

Я сохранил условие CASE для запроса SQL, который приводит к значению с плавающей запятой / числовому значению.Одно из условий CASE - сказать Н / Д.Я сохранил часть кода.

Для столбца: Compliance - Возможные значения: N / A, 100.0,99.1 ... (nvarchar, float).

select 
    x.MemberName, x.DOB, x.FilePath, 
    x.Medication, x.NDC, x.Directions, 
    x.Name, x.Strength, x.GenericName,
    x.QtyOrdered, x.DaysSupply, x.DateFilled, 
    CASE WHEN x.test = 0 THEN 'N/A' 
         WHEN compliance > 100.0 THEN '100.0' 
         ELSE CAST(FLOOR(compliance * 10)/10.0 AS DECIMAL(3, 1)) 
    END AS [Compliance]

вышесинтаксическая ошибка разливов как ..

Сообщение 8114, уровень 16, состояние 5, строка 10
Ошибка преобразования типа данных varchar в числовой.

Как следует печататьбросить поле?

Ответы [ 2 ]

4 голосов
/ 24 августа 2011

CASE - это выражение, которое возвращает один результат, и независимо от пути, который всегда необходим для получения одного и того же типа данных (или неявно преобразуемого в один и тот же тип данных).Попробуйте:

...
CASE 
    WHEN x.test = 0           THEN 'N/A' 
    WHEN compliance > 100.0   THEN '100.0' 
    ELSE CONVERT(VARCHAR(5), CAST(FLOOR(compliance *10)/10.0 AS DECIMAL(3,1))) 
    END AS as [Compliance];
1 голос
/ 24 августа 2011

Вы не согласны с вашим утверждением CASE - вам нужно предоставить тот же тип данных, что и для всех опций.

 CASE WHEN x.test = 0 THEN 'N/A' 
     WHEN compliance > 100.0 THEN '100.0' 
     ELSE CAST(FLOOR(compliance * 10)/10.0 AS DECIMAL(3, 1)) 
 END AS [Compliance]

Поскольку первые два параметра возвращают строку ('N/A' или '100.0'), последний параметр также должен возвращать строковое значение:

 CASE WHEN x.test = 0 THEN 'N/A' 
     WHEN compliance > 100.0 THEN '100.0' 
     ELSE CAST(CAST(FLOOR(compliance * 10)/10.0 AS DECIMAL(3, 1)) AS VARCHAR(20))
 END AS [Compliance]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...