Разница во времени Oracle между SYSDATE и датой из столбца

Я новичок в Oracle. У меня есть эта проблема, у меня разница в 365 дней, в то время как разница между этими двумя датами составляет всего один день.

Это мой вывод запроса SYSDATE:

ВЫБРАТЬ to_date (SYSDATE, 'yyyy-MM-dd') FROM LOGINRECORDS

15-OCT-11

Это моя дата из столбца Query Output:

ВЫБЕРИТЕ to_date (LoginDate, 'гггг-мм-дд') ИЗ LOGINRECORDS, ГДЕ LoginRecordId = '1000001'

15-OCT-10

И когда я запускаю этот запрос:

SELECT (to_date (SYSDATE, 'yyyy-MM-dd') - to_date (LoginDate, 'yyyy-MM-dd')) разница ОТ LOGINRECORDS WHERE LoginRecordId = '1000001'

Получил вот что:

365

Это описание моей таблицы:

CREATE TABLE LOGINRECORDS
(
    LoginRecordId NUMBER GENERATED ALWAYS AS IDENTITY START WITH 1000000 INCREMENT BY 1,    
    LoginDate DATE,
    patientUserId NUMBER
)

Надеюсь, вы, ребята, готовы помочь, заранее сообщите об этом.


person SkyvrawleR    schedule 11.10.2015    source источник


Ответы (1)


Это выражение:

to_date(SYSDATE, 'yyyy-MM-dd') 

не имеет смысла. SYSDATE уже свидание. Итак, это выражение преобразует SYSDATE в строку, используя любые локальные настройки вашей системы. Затем он преобразует этот результат в дату, используя формат 'yyyy-MM-dd'. Для многих значений локальных настроек это просто не сработает.

Если вам нужна разница, сделайте что-нибудь вроде этого:

SELECT (trunc(SYSDATE) - trunc(LoginDate)) as difference
FROM LOGINRECORDS
WHERE LoginRecordId = '1000001';

Обратите внимание, что в Oracle тип данных DATE имеет компонент времени, поэтому используется trunc(). Если вы знаете, что LoginDate не имеет компонента времени, тогда эта часть не требует trunc().

person Gordon Linoff    schedule 11.10.2015