2012-04-01 5 views
6

Das Szenario ist dies: wählen Sie maximale Datum aus einer Tabelle, wenn die Zieltabelle keine Daten hat, so ist das maximale Datum Null. Wenn das Datum null ist, möchte ich das früheste Systemdatum erhalten, also scheint die Epoche perfekt zu sein.Wie bekomme ich die Epochzeit in SQL Server?

Ich habe einige Möglichkeiten einschließlich DATEADD Funktionen gesucht, aber das scheint nicht elegant.

+0

möglich duplicate von [Was ist äquivalent von php time() in mssql?] (Http://stackoverflow.com/questions/5942002/whats-the-äquivalent-of-php-time-in-mssql) – Corbin

+0

Warten ... Meinst du Epoche wie in einer Epoche überhaupt, oder speziell in der Unix-Epoche? Auch das Maximum einer nicht existierenden Menge, die null ist, macht für mich Sinn. Warum magst du das Null-Ergebnis nicht? – Corbin

+0

@Corbin: de ... Ich möchte diese Zeit als eine Bedingung verwenden. Wenn es also null ist, muss ich die where-Klausel ändern, die nicht mein Anspruch ist. Am Ende scheint eine Epoche Zeit perfekt für dieses Szenario, keine Änderungen müssen in where-Klausel sein. Habe ich mich selbst gereinigt? – freeman

Antwort

8

Wenn ich verstehe, ist Ihre Frage richtig, in SQL Server die Epoche von cast(0 as datetime) gegeben:

select Max(ISNULL(MyDateCol, cast(0 as datetime))) 
from someTable 
group by SomeCol 
0

Wenn Sie die Epoche als 1. Jan definieren 1970: Je besser: sie speichern in einer Variablen

DECLARE @epoch DATETIME 
SET  @epoch = CONVERT(DATETIME, '01 JAN 1970', 106) 

select 
DATEPART(YEAR, DATEADD(day, 180, @epoch)) as year, 
... 
3

Das früheste Datum, das in einem SQL-Datetime-Feld gespeichert werden kann, hängt von dem Datentyp Sie verwenden:

datetime: 
    1753-01-01 through 9999-12-31 

smalldatetime: 
    1900-01-01 through 2079-06-06 

date, datetime2 and datetimeoffset: 
    0001-01-01 through 9999-12-31 
siehe

Für genauere Details von https://msdn.microsoft.com/en-GB/library/ms186724.aspx#DateandTimeDataTypes

Die epoch nützlich ist, wenn Sie Zahlen Daten konvertieren, aber irrelevant, wenn Sie Termine als Termine werden zu speichern.

Wenn Sie nicht mit Nullen richtig umgehen wollen, ist die einfache Antwort, ein Datum auszuwählen, von dem Sie wissen, dass es vor Ihren Daten sein wird, und es in Ihre Anfrage fest einprogrammieren. cast('1900-01-01' as datetime) wird in den meisten Fällen funktionieren.

Bei der Verwendung von etwas wie cast(0 as datetime) erzeugt das gleiche Ergebnis es verdunkelt, was Sie in Ihrem Code getan haben. Jemand, der es beibehält und sich fragt, woher diese seltsamen alten Daten kommen, wird in der Lage sein, das fest codierte Datum schneller zu erkennen.

Verwandte Themen