В настоящее время я застрял в этом подходе, не понимаю, как мне нужно minus с current timestamp и найти все записи, которые отличаются от 5 minutes or less
Мой стол
create table demo ( id number, modified_date timestamp(6) );
insert into demo values(1,to_timestamp('10-MAY-19 07.14.15.066000000 AM','DD-MON-RR HH.MI.SSXFF AM'));
insert into demo values(5,to_timestamp('10-MAY-19 07.16.11.064000000 AM','DD-MON-RR HH.MI.SSXFF AM'));
insert into demo values(3,to_timestamp('10-MAY-19 07.15.13.062000000 AM','DD-MON-RR HH.MI.SSXFF AM'));
insert into demo values(12,to_timestamp('10-MAY-19 07.18.10.056000000 AM','DD-MON-RR HH.MI.SSXFF AM'));
insert into demo values(14,to_timestamp('10-MAY-19 07.20.09.046000000 AM','DD-MON-RR HH.MI.SSXFF AM'));
Данные в таблице
id modified_date
1 10-MAY-19 07.14.15.066000000 AM
5 10-MAY-19 07.16.11.064000000 AM
3 10-MAY-19 07.15.13.062000000 AM
12 10-MAY-19 07.18.10.056000000 AM
14 10-MAY-19 07.20.09.046000000 AM
Мой запрос не дает ответа в течение нескольких минут
select modified_date - current_timestamp as dt_minutes from demo;
Ожидается: нужна запись как разница 5 minutes or less с current_timestamp.
id modified_date date_differenence
1 10-MAY-19 07.14.15.066000000 AM modified_date - current_timestamp ( in minutes )
5 10-MAY-19 07.16.11.064000000 AM modified_date - current_timestamp ( in minutes )
3 10-MAY-19 07.15.13.062000000 AM modified_date - current_timestamp ( in minutes )
12 10-MAY-19 07.18.10.056000000 AM modified_date - current_timestamp ( in minutes )
14 10-MAY-19 07.20.09.046000000 AM modified_date - current_timestamp ( in minutes )
Примечание:
NLS_LANGUAGE = 'AMERICAN'
NLS_TIMESTAMP_TZ_FORMAT = 'DD-MON-RR HH.MI.SSXFF AM TZR'
NLS_CALENDAR ='GREGORIAN'


Используйте INTERVAL DAY TO SECOND:
SELECT id,
modified_date,
current_date,
modified_date - current_timestamp AS interval_difference,
EXTRACT(MINUTE FROM modified_date - current_timestamp) AS minutes_difference
FROM demo
WHERE modified_date BETWEEN CURRENT_TIMESTAMP - INTERVAL '5' MINUTE
AND CURRENT_TIMESTAMP + INTERVAL '5' MINUTE;
Используйте ABS(EXTRACT(MINUTE FROM current_date - modified_date)), если знак вас не беспокоит.
Что для примера данных:
CREATE TABLE demo (
id NUMBER,
modified_date TIMESTAMP(6)
);
INSERT INTO demo (id, modified_date)
SELECT 1, CURRENT_TIMESTAMP + INTERVAL '10' MINUTE FROM DUAL UNION ALL
SELECT 2, CURRENT_TIMESTAMP + INTERVAL '5:01' MINUTE TO SECOND FROM DUAL UNION ALL
SELECT 3, CURRENT_TIMESTAMP + INTERVAL '5:00' MINUTE TO SECOND FROM DUAL UNION ALL
SELECT 4, CURRENT_TIMESTAMP + INTERVAL '4:59' MINUTE TO SECOND FROM DUAL UNION ALL
SELECT 5, CURRENT_TIMESTAMP + INTERVAL '0' MINUTE FROM DUAL UNION ALL
SELECT 6, CURRENT_TIMESTAMP - INTERVAL '4:59' MINUTE TO SECOND FROM DUAL UNION ALL
SELECT 7, CURRENT_TIMESTAMP - INTERVAL '5:01' MINUTE TO SECOND FROM DUAL UNION ALL
SELECT 8, CURRENT_TIMESTAMP - INTERVAL '5' YEAR FROM DUAL;
Выходы:
Я пробовал по-другому, ниже мой ответ. Спасибо за ваши ответы. Помогите мне исправить мое приведенное ниже решение, если оно неверно.
Похоже, запрос не может получить для меня записи. Можете ли вы проверить вопрос еще раз? Я обновил несколько дополнительных сведений о моей системе NLS в примечаниях. Это проблема, из-за которой невозможно получить какие-либо записи.
не могли бы вы помочь мне решить эту проблему
Я попробовал это таким образом, и это сработало. В случае возникновения каких-либо проблем в запросе mu. Пожалуйста, помогите мне исправить это вместе с объяснением.
SELECT
id,
modified_date,
EXTRACT(MINUTE FROM CAST(current_timestamp AS TIMESTAMP)) AS cur_minutes,
EXTRACT(MINUTE FROM CAST(modified_date AS TIMESTAMP)) AS mod_minutes,
EXTRACT(MINUTE FROM CAST(current_timestamp AS TIMESTAMP)) - EXTRACT(MINUTE FROM CAST(modified_date AS TIMESTAMP)) AS min_diff
FROM
demo
WHERE
modified_date > current_timestamp - INTERVAL '5' MINUTE;
Это неверно, поскольку если текущее время — 12:03:00, а измененное время — 11:59:00, тогда 3 - 59 = -56 фактическая разница составляет 4 минут. Вам нужно извлечь минуты из разницы интервалов (после вычитания), а не из времени (до вычитания). Я обновил свой ответ.
Все образцы данных в вашем вопросе относятся к маю 2019 года; в этом месяце июль 2024 года, и ни одна из ваших строк не будет находиться в пределах 5 минут от текущей даты (даже в течение 5 лет). Пожалуйста, объясните на английском языке (не в коде), какую логику вы собираетесь реализовать и каков ожидаемый результат для вашего примера данных?