SQL Where-Klausel für zwei Daten genau einen Monat minus eine Sekunde voneinander entfernt?

Ich habe zwei Datetime-Spalten in einer Tabelle, und ich möchte genau jene Zeilen auswählen, deren Unterschied von der ersten Spalte zur zweiten Spalte eine Sekunde vor einem Monat ist. Zum Beispiel würde es diese Zeilen (und keine anderen) für Datumsangaben im Jahr 2011 auswählen:

col1                col2
2011-01-01 00:00:00 2011-01-31 23:59:59
2011-02-01 00:00:00 2011-02-28 23:59:59
2011-03-01 00:00:00 2011-03-31 23:59:59
2011-04-01 00:00:00 2011-04-30 23:59:59
2011-05-01 00:00:00 2011-05-31 23:59:59
2011-06-01 00:00:00 2011-06-30 23:59:59
2011-07-01 00:00:00 2011-07-31 23:59:59
2011-08-01 00:00:00 2011-08-31 23:59:59
2011-09-01 00:00:00 2011-09-30 23:59:59
2011-10-01 00:00:00 2011-10-31 23:59:59
2011-11-01 00:00:00 2011-11-30 23:59:59
2011-12-01 00:00:00 2011-12-31 23:59:59

Bei der Auswahl für 2012 müsste beispielsweise das Schaltjahr berücksichtigt werden.

Wie würde ich eine solche Aussage schreiben?

1

1 Antworten

SELECT *
FROM Table
WHERE col2 = DATEADD(second, -1, (DATEADD(Month, 1 Col1)))
-- check for either direction
OR col1 = DATEADD(second, -1, (DATEADD(Month, 1 Col2)))

Dies sagt, "Zeige mir Zeilen, wo Spalte2 ist (ein Monat mehr und eine Sekunde weniger) als Spalte1."

Die integrierte Datumslogik in SQL Server berücksichtigt automatisch beispielsweise Schaltjahre.

3
hinzugefügt
+1 Beachten Sie, dass der OP möchte, dass der Vergleich auf beide Arten funktioniert, z. B. eine Differenz in beiden Richtungen.
hinzugefügt der Autor RedFilter, Quelle
@RedFilter - guter Punkt, ich werde das hinzufügen.
hinzugefügt der Autor JNK, Quelle