Последние записи
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
- wprintf как напечатать кириллицу
- Взаимодействие через командную строку
- Сравнение языков на массивах. Часть 1
- Сравнение языков по скорости
- Чтение огромных xml-файлов
- Как в Python+Selenium webdriver открыть новую вкладку в уже открытом браузере?
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
26th
Ноя
Oracle. Расчет врмени между 2я датами, как?
Posted by maloy under sql
Человек_Борща
Доброго времени суток!
Надо найти разницу во времени между 2я датами:
А: 23.11.2013 09:03:14
Б: 21.11.2013 06:14:00
так чтобы получить разницу в днях часах минутах и секундах, т.е.
А — Б = 1 день 21 часов 11 минут N секунд.
Как это реализовать?
Сейчас пытаюсь получить какую-то разницу:
SELECT * FROM RRRR R WHERE
(
TRUNC(
MOD(
(SYSDATE - R.DATETIMERECEIVE) * 86400, 3600
)/60/60
) > 1
)
Пример нашел в сети, прошу объяснить как он работает:
1. Что получается после вычитания, и почему оно домножается на 86400?
2. Что такое 3600?
3. Если я делю на 60, то записи выводятся т.к. подподают под условие > 1
4. Если я делю на 60 а затем ещё раз на 60, то записи НЕ выводятся.
Аватар
SYSDATE — R.DATETIMERECEIVE — разница в днях (1.23540003)
(SYSDATE — R.DATETIMERECEIVE) * 86400 — разница в секундах
MOD((SYSDATE — R.DATETIMERECEIVE) * 86400, 3600) — остаток от деления = секунды после отбрасывания целых часов
Как-то многоэтажно, чтобы получить 5 дн 13 ч 36 м 05 с:
TRUNC(SYSDATE-R.DATETIMERECEIVE) - разница в целых сутках (d)
TRUNC((SYSDATE-R.DATETIMERECEIVE-d)*86400) - остался остаток в секундах cекундах (s)
TRUNC(s/3600) - целое число часов в остатке
TRUNC(MOD(s,3600)/60) - целое число минут в остатке
MOD(s,3600) - целое число секунд в остатке
Если во WHERE лучше сразу анализировать на разницу в сек. Зачем там монстровидный анализ? Например
WHERE (SYSDATE - R.DATETIMERECEIVE) * 86400>100000
А вообще условие паршивое, медленное
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)