Я довольно новичок в SQL, но все еще написал несколько запросов, которые очень похожи на тот, который я пишу сейчас. По какой-либо причине, когда я запускаю этот запрос, мне возвращается ошибка «ORA-01821: формат даты не распознан». Я посмотрел на это и осмотрелся здесь, в Stack и других местах, и я считаю, что мой синтаксис имеет смысл, поэтому я смущен тем, почему у меня возникла ошибка.Oracle Date Format Mystery - Почему это не приемлемый формат?
Мой запрос работает в зависимости от того, в какой день месяца он находится. Если это первый, он должен работать в течение 15-го числа предыдущего месяца. Если это 16-й, он должен работать в течение 1-го 15-го числа текущего месяца.
Это мой код, когда это первый день месяца:
select
case
when to_char(sysdate, 'yyyymmdd') = to_char(sysdate, 'yyyymm' || '01') then (do a lot of things)
.
.
.
end as FirstReportGroup
where *datetable* between between to_char(sysdate, 'yyyymm' || '16') and to_char(last_day(sysdate), 'yyyymmdd');
и это мой код, когда это шестнадцатый:
select
case
when to_char(sysdate, 'yyyymmdd') = to_char(sysdate, 'yyyymm' || '16') then (do a lot of things again)
.
.
.
end as SecondReportGroup
where *datetable* between to_char(sysdate, 'yyyymm' || '01') and to_char(sysdate, 'yyyymm' || '15')
Он должен быть какой-то синтаксической ошибки форматирования даты, которую я просто не вижу. Я был бы очень признателен за помощь здесь, и я с нетерпением жду этого! Дайте мне знать, если вам нужна дополнительная информация.
Спасибо.
sysdate - какой тип данных по сравнению с to_char? (дата для символа правильная?) Вам нужно сравнить, как типы данных, чтобы начать. – xQbert
О, ну, глупая ошибка. Я просто изменил sysdate на: to_char (sysdate, 'yyyymmdd) и исправил эту проблему. Тем не менее, все еще не удается увидеть мою синтаксическую ошибку с форматом даты. – rtoken
ошибка вызвана '01' и '16', это не допустимый формат для инструкции to_char, поэтому, если вы хотите получить этот день, вы должны использовать 'to_char (sysdate, 'dd')'. Это возвращает часть дня – Aramillo