В ваших данных могут быть значения, недопустимые для даты. Вам, вероятно, следует проверить записи. Спецификация даты требует месяца от 1 до 12, дня от 1 до 31 в зависимости от месяца (поэтому 30 февраля будет недействительным) и года от 0000 до 9999. Что-то вроде этого для месяцев, вы хотите проверить также дни:
insert into sodate (f1) values ('442020');
insert into sodate (f1) values (' 2020');
select f1, left(f1,2) from sodate where left(f1,2) not in ('01','02','03','04','05','06','07','08','09','10','11','12')
В substring
в первом примере отсутствуют параметры. Получив дату в правильном формате ('гггг-мм-дд'), вы сможете сравнить ее со значением даты, не преобразовывая ее в тип данных SQL_DATE. Еще одна вещь: вы добавляете «20» перед всеми годами, что произойдет, если ваши данные датируются до 2000 года? Вам нужно будет учитывать это. В PCC, когда я запускаю:
select Convert('2019-12-31',SQL_DATE)
Я получил:
EXPR_1
==========
12/31/2019
Я использовал следующее:
create table sodate (f1 char(6));
insert into sodate (f1) values ('123119');
insert into sodate (f1) values ('081818');
insert into sodate (f1) values ('081820');
insert into sodate (f1) values ('082020');
select * from sodate;
-- This should give the results you want
select concat(concat(concat(concat(concat('20',right(f1, 2)),'-'),left(f1,2)),'-'),substring(f1,3,2)) from sodate where
concat(concat(concat(concat(concat('20',right(f1, 2)),'-'),left(f1,2)),'-'),substring(f1,3,2)) > '2019-12-31';
-- This query shows you don't need the CONVERT to compare a date.
select concat(concat(concat(concat(concat('20',right(f1, 2)),'-'),left(f1,2)),'-'),substring(f1,3,2)) from sodate where
concat(concat(concat(concat(concat('20',right(f1, 2)),'-'),left(f1,2)),'-'),substring(f1,3,2)) › = сейчас()
И получил следующие результаты:
EXPR_1
==============
2019-12-31
2020-08-18
и второй запрос дает:
EXPR_1
==============
2020-08-20
person
mirtheil
schedule
18.08.2020