Jak sprawdzić ilość miesięcy między dwoma datami?

0

Mam nietypowe pytanie. Mam w bazie dwa pola określające rok i miesiąc (np 2014 i 05 - co oznacza maj 2015) teraz potrzebowałbym w zapytaniu wyciągnąć różnicę między obecnym miesiącem, a datą wynikającą z obu kolumn. Możecie mi podpowiedzieć jak próbowałem czegoś takiego:

strftime('%m','now') - strftime('%m','2011-10-10')

ale nie bardzo to działa ...

1

Twój kod nie uwzględnia różnicy w latach (między sty 2014 a lut 2016 jest 12 + 11 + 1 miesięcy (24)).

ilosc_miesiecy = (rok_a - rok_b) * 12 + (miesiac_w_roku_a - miesiac_w_roku_b);

Wzór prawdziwy dla przypadku gdy miesiące są zapisywane w przedziale 0 - 11.

Testowałem wzór na poniższym kodzie w języku C#. Kwestia przerobienia go do SQL-a.

using System;

namespace C
{
    class Program
    {
        static void W(int t)
        {
            Console.WriteLine(t.ToString());
        }

        static void Main(string[] args)
        {
            W(Diff(new Dt() { Month = 0, Year = 2000 }, new Dt() { Month = 0, Year = 2000 })); // 0
            W(Diff(new Dt() { Month = 0, Year = 2000 }, new Dt() { Month = 1, Year = 2000 })); // 1
            W(Diff(new Dt() { Month = 1, Year = 2000 }, new Dt() { Month = 0, Year = 2000 })); // -1

            W(Diff(new Dt() { Month = 0, Year = 2000 }, new Dt() { Month = 11, Year = 1999 })); // 1
            W(Diff(new Dt() { Month = 11, Year = 1999 }, new Dt() { Month = 0, Year = 2000 })); // -1

            W(Diff(new Dt() { Month = 6, Year = 2000 }, new Dt() { Month = 8, Year = 2000 })); // -2
            W(Diff(new Dt() { Month = 8, Year = 2000 }, new Dt() { Month = 6, Year = 2000 })); // 2

            W(Diff(new Dt() { Month = 0, Year = 2000 }, new Dt() { Month = 11, Year = 2000 })); // -11
            W(Diff(new Dt() { Month = 0, Year = 2000 }, new Dt() { Month = 0, Year = 2001 })); // -12

            Console.Read();
        }

        static int Diff(Dt a, Dt b)
        {
            return (a.Year - b.Year)*12 + (a.Month - b.Month);
        }

        public class Dt
        {
            public int Month { get; set; }
            public int Year { get; set; }
        }
    }
}
1

załóżmy że kolumna rok i miesiąc to INT, wtedy możesz wyliczyć w następujący sposób:

select (strftime('%Y', 'now')*12+strftime('%m', 'now')) - (rok*12+miesiac) from tabela

1 użytkowników online, w tym zalogowanych: 0, gości: 1