Преобразование SQL Server в операторе Case

У меня есть столбец с именем CompositeRate, это десятичный (10,2) тип данных. Я пишу оператор Select, который должен возвращать пустую строку, если CompositeRate равен 0,00, однако я получаю эту ошибку: Msg 8114, уровень 16, состояние 5, строка 1. Ошибка преобразования типа данных varchar в числовой.

Это мой случай

select CASE WHEN compositeRate = 0.00 THEN '' else compositeRate from table

Не могли бы вы сообщить мне, где я должен написать convert в своем заявлении?


person user3345212    schedule 05.07.2014    source источник


Ответы (2)


Вам нужно будет преобразовать compositeRate в строку в части else:

SELECT CASE 
          WHEN compositeRate = 0.00 THEN CAST('' AS Varchar(20))
          ELSE CAST(compositeRate AS VARCHAR(20))
       END          AS compositeRate 
  FROM table

или используйте CONVERT с соответствующими значениями.

Прямо сейчас у вас есть выражение CASE, которое возвращает либо строку, либо число, и вам нужно решить, какой тип следует вернуть. Одно выражение CASE должно возвращать один тип.

person Lasse V. Karlsen    schedule 05.07.2014

Я посмотрел эту тему, чтобы решить аналогичную проблему. Я использую операторы CASE для преобразования значений NULL, сгенерированных из JOIN в общем запросе.

В частности, я смотрю на оценки, которые представлены в виде DECIMAL в таблицах, с которыми я работаю.

Вот что у меня получилось (да, это всего лишь фрагмент всего запроса):

CASE

WHEN B.[DecimalGrade] IS NULL THEN CAST ('' AS NVARCHAR (1))

ELSE CAST (B.[DecimalGrade] AS NVARCHAR (4))

END AS DecimalGrade
person Joel    schedule 04.12.2019