Почему преобразование даты to_char () вызывает ошибку ORA-01830 при помещении в case-then? - PullRequest
1 голос
/ 06 мая 2020

Я давно использую этот код, и он отлично работает:
to_char(v_emailRow.first_stamp, 'dd.mm.yyyy')

Однако сегодня мне нужно было добавить следующее условие
case when v_cardCode = 'C1' then v_date else to_char(v_emailRow.first_stamp, 'dd.mm.yyyy') end.

Как только я добавил оператор case-then, всякий раз, когда нужно было выполнить to_char (), он всегда начинал выдавать ошибку ORA-01830: date format picture ends before converting entire input string. Если я уберу case-then, он работает как обычно, если я добавлю его обратно, ошибка сразу вернется.

Я попытался написать тестовый сценарий, погуглил, но не могу найти проблему. В обоих случаях конвертируется одно и то же значение, почему одно из них работает, а другое выдает ошибку?

1 Ответ

2 голосов
/ 06 мая 2020

когда v_cardCode = 'C1', затем v_date else to_char (v_emailRow.first_stamp, 'dd.mm.yyyy')

всякий раз, когда нужно было выполнить to_char (), он всегда начинал бросать ORA -01830: изображение формата даты заканчивается перед преобразованием всей входной строки ошибка

v_date, поскольку имя переменной предполагает, что это тип данных DATE, а применение TO_CHAR преобразует дату в STRING. Следовательно, наличие двух разных типов данных вызывает ошибку.

Попробуйте указать ниже CASE в своем SQL:

case 
  when v_cardCode = 'C1' 
  then to_char(v_date, 'dd.mm.yyyy')
  else to_char(v_emailRow.first_stamp, 'dd.mm.yyyy') 
end
...