2017-10-23 2 views
0

Ich habe eine Tabelle in MSSQL Server, die Datum als bigInt Typ wie 1503381651490 speichern. Jetzt möchte ich Zeilen, die created_time zwischen 2017-01-01 bis 2017-03-28 auswählen. Was soll ich machen?Wählen Sie Zeilen zwischen zwei Datum, dass bigint mit adddate

Dank

+1

startet von hier [Von Bigint zu Datetime-Wert Umrechnen] (https://stackoverflow.com/questions/3650320/convert-from- bigint-to-datetime-value) – Valerica

+0

Verwenden Sie geeignete Spaltendatentypen ... – jarlh

+0

@jarlh diese DB ist nicht für mich –

Antwort

0

ich Problem mit dieser gelöst:

SELECT "chdt"."CHANGEID" AS "Change ID",  "chdt"."CREATEDTIME" AS "Created 
Date", "chdt"."TITLE" AS "Title" FROM "ChangeDetails" "chdt" 
WHERE dateadd(s,("chdt"."CREATEDTIME"/1000),'1970/01/01') >= '2017/10/01' 
AND (dateadd(s,("chdt"."CREATEDTIME"/1000),'1970/01/01') <= '2017/10/05') 
0

Wie andere vorgeschlagen haben, sollten Sie die Datetime in seinem korrekten Format speichern.

Vorerst ist der Wert gespeichert unter der Annahme, UNIX-Zeitstempel, können Sie den gewünschten Datumsbereich Unix-Zeitstempel konvertieren:

select * 
from your_table 
where created_time between datediff(minute,'1990-1-1','2017-01-01') 
         and datediff(minute,'1990-1-1','2017-03-28') 
1

Zuerst die bigint Felder Date, um die Filter anwenden konvertieren müssen . Sie können die folgende Konvertierung dafür verwenden.

10000000 * 24 * 60 * 60 = 864000000000 

SELECT CAST((bigintvalue - 599266080000000000)/864000000000 AS DATETIME) AS DateTimeConv; 

Danach können Sie die Filter auf dem konvertierten Datumsfeld anwenden können. Zum Beispiel

SELECT CAST((created_time - 599266080000000000)/864000000000 AS DATETIME) AS DateTimeConv 
FROM Table1 
WHERE DateTimeConv < MaxDateValue 
     AND DateTimeConv > MinDateValue; 
+0

Arithmetischer Überlauffehler beim Konvertieren des Ausdrucks in den Datentyp datetime. –

Verwandte Themen