Как получить данные на основе даты из столбца типа данных datetime в Oracle Ocl - PullRequest
0 голосов
/ 03 декабря 2018

Я использую SAP BODS и пытаюсь получить данные с сервера ORACLE, используя преобразование SQL-запросов.Теперь в таблице есть столбец с именем latest_changed_date, который является столбцом даты и времени.Я хочу только данные вчера и текущего дня из этой таблицы.Теперь, поскольку столбец имеет значение datetime, мне нужно преобразовать его в date, но когда я использую функцию to_date, я получаю следующую ошибку:

SELECT *
FROM ABC.TEST
WHERE TO_DATE(LATEST_CHANGED_DATE) = TO_DATE(SYSDATE-1)

Сообщение об ошибке базы данных:

ORA-01843: недопустимый месяц

Я попытался указать формат даты в условии TO_DATE, как показано ниже:

SELECT *
FROM ABC.TEST
WHERE TO_DATE(LATEST_CHANGED_DATE,'YYYY-MM-DD') >= TO_DATE(SYSDATE-1,'YYYY-MM-DD')

Здесь я получил ошибку:

date format picture ends before converting entire input string

Я также использовал функцию усечения и снова получил:

not a valid month

или

inconsistent datatypes: expected NUMBER got DATE

Ниже приведен пример данных для столбца.Мне просто нужны данные за текущий и день перед данными из столбца.

enter image description here

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

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

это будет работать:

SELECT *
FROM ABC.TEST
where sysdate-LATEST_CHANGED_DATE<=sysdate-(sysdate-2);

например, возьмем это:

ALTER SESSION SET NLS_DATE_FORMAT = ' DD-MON-YYYY HH24:MI:SS';
SELECT * FROM d061_dates ;

 03-DEC-2018 17:44:38
 25-AUG-2018 17:44:42
 30-AUG-2018 17:44:46
 01-DEC-2018 17:44:49
 02-DEC-2018 17:46:31

SELECT * FROM d061_dates
where sysdate-a<=sysdate-(sysdate-2);

 03-DEC-2018 17:44:38
 02-DEC-2018 17:46:31

вы должны взять sysdate минус с обеих сторон, чтобы получить сравнение по числу, которое меньше чем равнодо 2, чтобы получить день и день до вчерашнего дня и дает правильный вывод.

спасибо !!!!!!!!!!!!!

0 голосов
/ 03 декабря 2018

Вместо того, чтобы неявно приводить даты к строкам и конвертировать их обратно, используя TO_DATE( string_value, format_model ), вы можете использовать TRUNC() для усечения SYSDATE до начала дня:

SELECT *
FROM   ABC.TEST
WHERE  LATEST_CHANGED_DATE >= TRUNC( SYSDATE-1 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...