[TL; DR]
- Не используйте
TO_DATE
для типа данных DATE
. - Возможно, проблема связана с вводом данных.а не на выходе, так как вы, вероятно, получаете двухзначные вводы года, когда ожидается четырехзначный год.
Вам не нужно преобразовывать change_date
в DATE
, используяTO_DATE
, поскольку это уже тип данных DATE
.Просто используйте:
select changedate
from TICKETSTATUS;
Если вы хотите, чтобы значения даты имели определенный формат, используйте TO_CHAR
(не TO_DATE
):
SELECT TO_CHAR( changedate, 'dd.mm.yyyy' )
FROM TICKETSTATUS;
, но мой вывод[]:
30.03.0019
Это может быть связано с тем, что в другом месте вашего кода есть ошибка, которая, вероятно, вставляет даты из строки с двухзначным годом, где ожидается четырехзначный год:
CREATE TABLE TicketStatus ( changedate DATE );
INSERT INTO TicketStatus ( changedate ) VALUES ( TO_DATE( '30.03.19', 'dd.mm.yyyy' ) );
Тогда год будет 0019
.
Однако, если вы используете модель формата RR
для лет (или, в зависимости от целесообразности, формат YY
модель):
INSERT INTO TicketStatus ( changedate ) VALUES ( TO_DATE( '30.03.19', 'dd.mm.rr' ) );
Тогда год будет 2019
.
SELECT TO_CHAR( changedate, 'dd.mm.yyyy' )
FROM TicketStatus
Выходы:
| TO_CHAR(CHANGEDATE,'DD.MM.YYYY') |
| :------------------------------- |
| 30.03.0019 |
| 30.03.2019 |
db <> Fiddle здесь
Это также может быть связано с тем, что NLS_DATE_SETTING
в вашем сеансе установлено на dd.mm.yy
и неявное преобразование, выполненное с использованием TO_DATE
в столбце даты, удаляет столетие, нотогда ALL у ваших дат будет век 00
(а не только некоторые даты).