Ошибка HANA при разборе даты - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь сделать это

CREATE PROCEDURE Create_test(IN datefrom date
)
as

begin
select add_years('0',years_BETWEEN('0', :datefrom)-1 )from dummy;
end

Когда я его запускаю, все нормально, без ошибок, процедура создается. Но когда я пытаюсь вызвать процедуру, это выдает мне эту ошибку

Ошибка базы данных SAP Hana: недопустимое значение DATE, TIME или TIMESTAMP: ошибка во время разбора 11/11/2018 12:00:00 в качестве ДАТЫ в функции typecast () (в позиции 31)

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Сообщение об ошибке, скорее всего, вызвано тем, как вызывается процедура, т. Е. Входным параметром.

Когда вы вводите фактическую дату тип данных (например, возвращаемое значение из функции, подобной current_date, результат преобразования типа , как to_date ('21/02/2018', 'DD/MM/YYYY') или литерал даты date'2018/02/21') ошибок не возникает.

Итак, как вы написали в своем ответе, проблема заключается в формате текстовой даты, который вы вводите в процедуру. В таком случае SAP HANA попытается автоматически преобразовать значение в тип данных даты и завершится неудачей, если формат не является одним из документированных стандартных форматов.

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

Что касается фактической цели процедуры, то есть нахождения первой даты текущего года, есть гораздо более простой способ достичь этого.

Функция current_date возвращает текущую дату (в часовом поясе сервера). Взятие компонента YEAR этой даты может быть легко выполнено с помощью функции year(). Наконец, преобразование этого в тип данных date (daydate / seconddate) заполняет компоненты дня минимальным возможным значением: это первый день года.

select to_date(year(current_date)) NEW_YEAR_DATE from dummy

0 голосов
/ 30 апреля 2018

Я знаю ответ. Редактор, который я использую - TOAD for SAP Solution, выдает мне неправильный формат даты при выполнении процедуры. Это дает мне формат «ДД / ММ / ГГГГ», правильный - «ГГГГ / ММ / ДД».

...