Oracle не дает результата по сравнению с сегодняшним днем - PullRequest
0 голосов
/ 27 ноября 2018

Я выполнил этот простой запрос и не дал результата

enterselect * from record where recorddate = TO_DATE(2018, 'YYYY'); 

Я протестировал

Select to_date(recorddate,'YYYY') from record

Возвращается ora01830: изображение в формате даты заканчивается перед преобразованием всей входной строки

Вот моя структура таблицы:

create table record(
recordid varchar2(10),
singerid varchar2(10),
producedcountryid varchar2(10),
songid varchar2(10),
recorddate date,

constraint recordid_pk primary key (recordid),
constraint singerid2_fk foreign key (singerid) references singer(singerid),
constraint songid2_fk foreign key (songid) references song(songid)
);

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вы получите нужный набор результатов, запросив часть года столбца даты recorddate.

select * from record 
where extract (year from recorddate) = 2018
0 голосов
/ 27 ноября 2018

DATE с в Oracle включают часы, минуты и секунды.
Таким образом, если нет RECORDDATE с точно в 00:00:00 в данном месяце, предикат where recorddate = TO_DATE(2018, 'YYYY') не найдетчто-либо для сопоставления.

Во втором запросе to_date(recorddate,'YYYY') не является допустимым синтаксисом для использования to_date.Пожалуйста, смотрите to_date для получения дополнительной информации.

Если вы пытаетесь найти все RECORD s с RECORDDATE s в 2018 году, есть много способов сделать это.Ниже приведено несколько примеров.

CREATE TABLE RECORD (LOREM_IPSUM NUMBER, RECORDDATE DATE);
INSERT INTO RECORD VALUES (1,DATE '2017-05-05');
INSERT INTO RECORD VALUES (2,DATE '2018-05-05');
COMMIT;

SELECT * FROM RECORD;

  LOREM_IPSUM RECORDDATE
            1 05-MAY-17
            2 05-MAY-18

Затем:

SELECT * FROM RECORD WHERE EXTRACT(YEAR FROM RECORDDATE) = 2018;

Результат:

  LOREM_IPSUM RECORDDATE
            2 05-MAY-18

- Или:

SELECT * FROM RECORD WHERE TO_CHAR(RECORDDATE,'YYYY') = '2018';

Результат:

  LOREM_IPSUM RECORDDATE
            2 05-MAY-18

Если вам нужны записи за определенный год + месяц, вы можете:

SELECT * FROM RECORD WHERE TRUNC(RECORDDATE,'MM') = DATE '2017-05-01';

Результат:

  LOREM_IPSUM RECORDDATE
            1 05-MAY-17
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...