2016-09-17 5 views
1

ich folgenden zwei SQL-Abfragen ausgeführt werden soll:SQL Server Datumsbereich Abfrage nicht funktioniert

Nehmen Zeilenanzahl zwischen 1 Oct 2014 to 31 Dec 2014. Dazu habe ich diese Abfrage ausgeführt.

select count(*) 
from table_name 
where date_column > '30-Sep-2014 23:59:59.999' and date_column < '01-Jan-2015 00:00:00.000' 

Für welche bekam ich 28674262

zweite Abfrage ist die Zeilenanzahl zwischen 1 Jul 2014 to 31 Sep 2014 für die ich lief folgende Abfrage Ergebnis zu erhalten.

select count(*) 
from table_name 
WHERE date_column > '30-Jun-2014 23:59:59.999' and date_column < '01-Oct-2014 00:00:00.000' 

und ich habe dieses Ergebnis: 28296043

nun die Zeilenanzahl für 1 Jul 2014 to 31 Dec 2014 Zeitraum erhalte ich folgende Abfrage lief.

select count(*) 
from table_name 
WHERE date_column > '30-Jun-2014 23:59:59.999' and date_column < '01-Jan-2015 00:00:00.000' 

Diese Abfrage wird geben Ergebnis 57361505.

Wenn ich aufgrund der ersten und zweiten Abfrage hinzufügen, sollte es die gleiche Zeile geben als dritte Abfrage zählen, das heißt 57361505 aber ich bin immer 28674262 + 28296043 = 56970305

Ich möchte wissen, warum es einen Unterschied ist zwischen den Zeilen zählt? Ist etwas falsch mit meinen Fragen?

+0

Nein In der dritten Abfrage, die ich zwischen Juli bis Dezember für Zeilenanzahl suchen. – Shekhar

+0

Erhalten Sie den gleichen Unterschied auch im zweiten Lauf? –

Antwort

4

würden Sie scheinen einige Datensätze zu haben, sagen 200, wo das Datum zwischen '30 -Sep-2014 23: 59: 59.999' und '01 oct-2014 00: 00: 00.000' . Dies ist abhängig von den Arten der Datum/Uhrzeit-Werte möglich.

Die Zeitstempel loswerden! Sie sind nur verwirrend. Verwenden Sie diese Bedingungen:

where date_column >= '2014-10-01' and date_column < '2015-01-01' 
where date_column >= '2014-07-01' and date_column < '2014-10-01' 
where date_column >= '2014-07-01' and date_column < '2015-01-01' 

Im Allgemeinen, wenn Daten verwenden, benutzen Sie Vergleiche zu dem Zeitpunkt ohne Zeitkomponente und Ungleichheitsbedingungen verwenden, wo angemessen.

Beachten Sie auch, dass ich zu einem ISO-Standard-Datumsformat wechselte.

+0

Vielen Dank. Ich werde es versuchen – Shekhar

+0

Dieser Ansatz hat funktioniert. Jetzt stimmen die Zeilenzahlen korrekt überein. Ich frage mich, wie spät es sein kann zwischen 30-Sep-2014 23: 59: 59.999 'und '01-Oktober-2014 00: 00: 00.000'. – Shekhar

+1

Vielleicht verwenden Sie den Datentyp "datetime2"? Weitere Informationen [hier] (https://technet.microsoft.com/en-us/library/bb677335 (v = sql.105) .aspx). Dieses Format speichert mindestens 19 Positionen (JJJJ-MM-TT hh: mm: ss) bis maximal 27 (JJJJ-MM-TT hh: mm: ss.0000000) ' – gofr1

1

Versuchen Sie unten Abfrage und lassen Sie mich wissen, welche Anzahl es zurückgibt.

select count(*) from table_name 
WHERE date_column >= '01-Jul-2014' and date_column <= '31-Dec-2014 23:59:59:999' 
+0

Danke, dass du mir am Wochenende geholfen hast :) Ich habe diese Abfrage ausgeführt, aber ich habe die Zeilenanzahl als '57771746' erhalten. Können Sie bitte überprüfen, ob etwas in meiner Logik falsch ist? Erwarte ich richtige Sache? – Shekhar

+1

eine Sache tun, wenn Sie Excel haben dann alle Datensätze in Excel und zählen Sie dort mit Datumsbereich und vergleichen Sie die Anzahl zu Ihrer Abfrage und versuchen Sie auch Abfrage, wie ich erkläre und sehen, welche Abfrage gibt Ihnen zählen mit Excel übereinstimmen –

1

Es müssen einige Nullwerte in date_column sein, auch Graf Das

+1

ja, du darfst recht haben –

Verwandte Themen