Различие в месяцах между датами в MySQL

72
задан animuson 23 June 2013 в 00:35
поделиться

9 ответов

функция DATEDIFF может дать Вам количество дней между двумя датами. Который более точен, с тех пор..., как Вы определяете месяц? (28, 29, 30, или 31 день?)

15
ответ дан SoapBox 24 November 2019 в 12:26
поделиться
SELECT * 
FROM emp_salaryrevise_view 
WHERE curr_year Between '2008' AND '2009' 
    AND MNTH Between '12' AND '1'
1
ответ дан Darryl Hein 24 November 2019 в 12:26
поделиться

Это зависит от того, как Вы хотите, чтобы # месяцев был определен. Ответьте на это вопросы: 'Что является различием в месяцах: 15 февраля 2008 - 12 марта 2009'. Определенный ясным # дней, который зависит от високосных годов - какой месяц это, или тот же день предыдущего месяца = 1 месяц.

вычисление А в течение многих Дней :

15 февраля-> 29 (високосный год) = 14 марта 1, 2008 + 365 = 1 марта 2009. 1 марта-> 12 марта = 12 дней. 14 + 365 + 12 = 391 день. Общее количество = 391 день / (в среднем дни в месяце = 30) = 13.03333

вычисление А месяцев :

15 февраля 2008 - 15 февраля 2009 = 12 февраля 15-> 12 марта = Общее количество меньше чем 1 месяца = 12 месяцев, или 13, если 15 февраля - 12 синяка считается 'прошлым месяцем'

1
ответ дан Klathzazt 24 November 2019 в 12:26
поделиться

Существует ли лучший путь? да. Не используйте MySQL Timestamps. Кроме того, что они занимают 36 байтов, они нисколько не удобны для работы с. Я был бы reccomend, использующий Юлианскую дату и Секунды с полуночи для всей даты/временных стоимостей. Они могут быть объединены для формирования UnixDateTime. Если это хранится в DWORD (неподписанное 4-байтовое Целое число) затем даты полностью, до 2 106 могут быть сохранены как секунды с тех пор epoc, 01.01.1970 DWORD макс. val = 4,294,967,295 - DWORD может содержать 136 лет Секунд

, Юлианские даты очень хороши работать с при создании вычислений даты, с которыми значения UNIXDateTime хороши для работы при создании вычислений Даты/Времени, на которые Ни один не хорош для взгляда, таким образом, я использую Метки времени, когда мне нужен столбец, с которым я не буду делать большого вычисления, но я хочу сразу признак.

Преобразование в Julian и назад может быть сделан очень быстро на хорошем языке. Используя указатели у меня есть он вниз приблизительно к 900 Clks (Это - также преобразование от СТРОКИ до ЦЕЛОГО ЧИСЛА, конечно)

при вхождении в серьезные приложения, которые используют информацию о Дате/Времени как, например, финансовые рынки, даты Julian де-факто.

6
ответ дан Mike Trader 24 November 2019 в 12:26
поделиться

Из руководства MySQL:

PERIOD_DIFF (P1, P2)

Возвраты число месяцев между периодами P1 и P2. P1 и P2 должны быть в формате YYMM или YYYYMM. Обратите внимание, что аргументами периода P1 и P2 не являются значения даты.

mysql> ВЫБИРАЮТ PERIOD_DIFF (200802,200703);-> 11

, Таким образом, может быть возможно сделать что-то вроде этого:

Select period_diff(concat(year(d1),if(month(d1)<10,'0',''),month(d1)), concat(year(d2),if(month(d2)<10,'0',''),month(d2))) as months from your_table;

, Где d1 и d2 являются выражениями даты.

я должен был использовать, если () операторы, чтобы удостовериться, что месяцы были двузначным числом как 02, а не 2.

7
ответ дан Vincent Ramdhanie 24 November 2019 в 12:26
поделиться

PERIOD_DIFF вычисляет месяцы между двумя датами.

, Например, для вычисления различия между теперь () и столбец времени в your_table:

select period_diff(date_format(now(), '%Y%m'), date_format(time, '%Y%m')) as months from your_table;
101
ответ дан Max Caceres 24 November 2019 в 12:26
поделиться

Запрос будет иметь вид:

select period_diff(date_format(now(),"%Y%m"),date_format(created,"%Y%m")) from customers where..

Дает количество календарных месяцев с момента создания отметки даты в записи клиента, позволяя MySQL делать выбор месяца внутри себя.

5
ответ дан 24 November 2019 в 12:26
поделиться

Этот запрос сработал для меня :)

SELECT * FROM tbl_purchase_receipt
WHERE purchase_date BETWEEN '2008-09-09' AND '2009-09-09'

Он просто берет две даты и извлекает значения между ними.

-1
ответ дан 24 November 2019 в 12:26
поделиться

Я предпочитаю этот способ, потому что все ясно его поймут с первого взгляда:

SELECT
    12 * (YEAR(to) - YEAR(from)) + (MONTH(to) - MONTH(from)) AS months
FROM
    tab;
8
ответ дан 24 November 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: