oracle sql разница между датами в днях

Функция DATEDIFF стр. 2

Задача. Посчитать число минут в интервале между двумя датами – ‘2011-10-07 23:43:00’ и ‘2011-10-08 01:23:00’

SQL Server

Встроенная функция DATEDIFF решает проблему:

Результат – 100 минут.

В запросе используется стандартное представление даты (ISO) в виде текстовой строки ‘yyyy-mm-ddThh:mm:ss’, которое не зависит ни от локальных настроек сервера, ни и от самого сервера.

MySQL

Один день мы получим даже в случае, если интервал между датами составляет все одну секунду:

PostgreSQL

В PostgreSQL нет функции, подобной DATEDIFF (SQL Server) или TIMESTAMPDIFF (MySQL). Поэтому для решения задачи можно применить следующую последовательность действий:

Для получения интервала можно взять разность двух значений темпорального типа, При этом требуется явное преобразование типа:

Для получения числа секунд в интервале воспользуемся функцией

Значение интервала представим последним способом как наиболее коротким. Для получения окончательного решения задачи поделим полученный результат на 60:

В данном случае мы имеем результат, выраженный целым числом, поскольку оба значения времени в задаче не содержали секунд. В противном случае, будет получено десятичное число, например: 99.75:

Oracle

Oracle тоже не имеет в своем арсенале функции типа DATEDIFF. Кроме того, Oracle не поддерживает стандартное текстовое представление даты/времени.

Мы можем посчитать интервал в минутах, приняв во внимание, что разность дат (значений типа date ) в Oracle дает в результате число дней (суток). Тогда для вычисления интервала в минутах нужно просто разность дат умножить на 24 (число часов в сутках), а затем на 60 (число минут в часе):

Подобным образом можно получить и другие временные интервалы.

Источник

Как рассчитать разницу между двумя датами в oracle 11g SQL

когда я пытаюсь вычислить разницу дат, используя функцию datediff, она показывает этот недопустимый идентификатор.

можете вы пожалуйста сказать мне что функция для того чтобы высчитать разницу в даты.

6 ответов

нет DATEDIFF() функции в Oracle. В Oracle, это арифметический вопрос

Регистрация пример для большей видимости.

в случае, если вам нужен вывод в терминах часов, то ниже может помочь;

вы не можете использовать DATEDIFF но вы можете использовать это (если столбцы не являются типом даты):

вы можете увидеть образец

вы можете использовать это:

в основном to_char (sysdate,’DDD’) возвращает no дней от 1-jan-yyyy до sysdate так что, если вычесть две даты, он вернет это,вы получите разницу между двумя датами

разница между двумя датами (в обычном продукте базы данных oracle) в днях (которые могут иметь дробные части). Фактор 24, чтобы получить часы, 24 * 60, чтобы получить минуты, 24*60*60 чтобы получить секунды (это так же мало, как даты). Математика на 100% точна для дат в течение нескольких сотен лет или около того. Е. Г. чтобы получить дату за одну секунду до полуночи сегодня, вы могли бы скажи

Это означает «время прямо сейчас», усеченное, чтобы быть только датой (т. е. полночь, которая произошла сегодня утром). Затем он вычитает число, которое является долей 1 дня, которая измеряет одну секунду. Это дает вам дату с предыдущего дня с временной составляющей 23:59: 59.

Источник

Получить разницу между двумя датами в месяцах и днях в SQL

мне нужно получить разницу между двумя датами, скажем, если разница составляет 84 дня, я, вероятно, должен иметь вывод как 2 месяца и 14 дней, код, который у меня есть, просто дает итоги. Вот код

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

10 ответов

обновлено для корректности. Первоначально ответил @jen.

SQLFiddle демо :

обратите внимание, как за последние две даты Oracle сообщает десятичную часть месяцев (которая дает дни) неправильно. 0.1290 соответствует 4 дней с Oracle учитывая 31 дней в месяц (для Марта и апреля).

Я думаю, что ваш вопрос недостаточно хорошо определен по следующей причине.

ответы, основанные на months_between, должны иметь дело со следующей проблемой: что функция сообщает ровно один месяц между 2013-02-28 и 2013-03-31, и между 2013-01-28 и 2013-02-28, и между 2013-01-31 и 2013-02-28 (я подозреваю, что некоторые ответчики не использовали эти функции на практике или теперь придется пересмотреть какой-то производственный код!)

Это документированное поведение, в котором даты, которые являются последними в соответствующих месяцах или которые приходятся на один и тот же день месяца, считаются целым числом месяцев.

Если это неприемлемая ситуация, вам придется написать более сложную функцию или просто положиться на расчет, который предполагает 30 (например) дней в месяц. В последнем случае, как вы будете иметь дело с 2013-02-28 и 2013-03-31?

здесь я просто делаю разницу между сегодняшним днем и CREATED_DATE DATE поле в таблице, которое, очевидно, является датой в прошлом:

Я использую (365/12), или 30.416667, как мой коэффициент преобразования, потому что я использую общее количество дней и удаление лет и месяцев (Как дней), чтобы получить оставшееся количество дней. Во всяком случае, для моих целей этого было достаточно.

решение, которое я публикую, рассмотрит месяц с 30 днями

Источник

Как рассчитать разницу между двумя датами в Oracle 11g SQL

Когда я пытаюсь вычислить разницу в дате, используя функцию date diff, она показывает этот неверный идентификатор.

Подскажите, пожалуйста, что это за функция для расчета разницы дат.

6 ответов

Здесь нет DATEDIFF() функция в Oracle. На Oracle это арифметическая проблема

Проверьте ПРИМЕР для большей видимости.

Если вам нужен вывод в терминах часов, то может помочь следующее:

Вы можете использовать это:

Вы не можете использовать DATEDIFF но вы можете использовать это (если столбцы не типа даты):

вы можете увидеть образец

В основном to_char (sysdate, ‘DDD’) возвращает число дней от 1-jan-yyyy до sysdate, так что если вычесть две даты, они вернут это, вы получите разницу между двумя датами

Oracle DateDiff принадлежит другому продукту, возможно, mysql (который сейчас принадлежит Oracle).

Разница между двумя датами (в обычном продукте базы данных Oracle) заключается в днях (которые могут иметь дробные части). Коэффициент 24, чтобы получить часы, 24*60, чтобы получить минуты, 24*60*60, чтобы получить секунды (это так же мало, как и даты). Математика на 100% точна для дат в течение пары сотен лет или около того. Например, чтобы получить дату за одну секунду до полуночи сегодня, можно сказать,

Это означает «время прямо сейчас», усеченное до даты (т.е. полуночи, произошедшей сегодня утром). Затем он вычитает число, которое является частью 1 дня, который измеряет одну секунду. Это дает вам дату предыдущего дня с временной составляющей 23:59:59.

Источник

Типы данных INTERVAL в PL/SQL: интервал между датами

oracle sql разница между датами в днях. Смотреть фото oracle sql разница между датами в днях. Смотреть картинку oracle sql разница между датами в днях. Картинка про oracle sql разница между датами в днях. Фото oracle sql разница между датами в днях

oracle sql разница между датами в днях. Смотреть фото oracle sql разница между датами в днях. Смотреть картинку oracle sql разница между датами в днях. Картинка про oracle sql разница между датами в днях. Фото oracle sql разница между датами в днях

Объявление интервальных переменных в PL/SQL

По сравнению с другими объявлениями переменных PL/SQL синтаксис объявлений переменных обоих типов INTERVAL несколько необычен. Помимо того, что имена этих типов состоят из нескольких слов, для них задается не одно, а два значения, определяющих точность:

Здесь имя_переменной — имя объявляемой переменной INTERVAL ; точность_лет — количество цифр (от 0 до 4), выделенное для представления количества лет (по умолчанию 2); точность_дней — количество цифр (от 0 до 9), выделенное для представления количества дней (по умолчанию 2); точность_долей_секунды — количество цифр (от 0 до 9), выделенное для представления количества долей секунды (по умолчанию 6).

Доли секунды указываются потому, что значения типа INTERVAL DAY TO SECOND могут определять интервалы с указанной точностью до долей секунды. Значения типа INTERVAL YEAR TO MONTH не могут содержать долей месяца, и последние для них не задаются.

Когда используются типы INTERVAL в PL/SQL

Используйте типы данных INTERVAL во всех случаях, когда вам потребуется обрабатывать промежутки времени. В этом разделе приведены два примера; хочется верить, что они вызовут у вас интерес и помогут представить, как эти типы данных могли бы использоваться в создаваемых вами системах.

Вычисление разности между двумя значениями даты/времени

Типы INTERVAL удобно использовать для вычисления разности между двумя значениями даты/времени. В следующем примере вычисляется срок работы сотрудника:

Непосредственное вычисление количества лет и месяцев работы выполняется в следующей строке:

Здесь YEAR TO MONTH — часть синтаксиса выражения, возвращающего интервал. Подробнее о нем рассказывается далее в этой главе. Как видите, вычисление продолжительности интервала сводится к простому вычитанию одной даты из другой. Без типа данных INTERVAL нам пришлось бы программировать вычисления самостоятельно:

Тип INTERVAL YEAR TO MONTH выполняет округление значений, и вы должны знать о возможных последствиях этой операции. За подробностями обращайтесь к разделу «Арифметические операции над значениями даты/времени».

Обозначение периода времени

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

При передаче интервалов программам PL/SQL и из них необходимо использовать ключевое слово UNCONSTRAINED (см. далее раздел «Типы данных INTERVAL без ограничений»). Хранение времени сборки в таблице упрощает анализ данных. Мы можем легко определить минимальное, максимальное и среднее время сборки при помощи простых функций SQL, а также находить ответы на вопросы «Выполняется ли сборка по понедельникам быстрее, чем по вторникам?» или «Какая смена работает более производительно, первая или вторая?» Впрочем, я забегаю вперед. Этот тривиальный пример просто демонстрирует основные концепции интервалов. Ваша задача как программиста — найти творческое применение этим концепциям.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *