Ich suche nach einer SQL Server-Funktion, um den Mindestwert für datetime, nämlich den 1. Januar 1753, zurückzugeben. Ich möchte diesen Datumswert lieber nicht in mein Skript fest codieren.
Gibt es so etwas? (Zum Vergleich, in C # könnte ich es einfach tun DateTime.MinValue)
oder müsste ich das selbst schreiben?
Ich verwende Microsoft SQL Server 2008 Express.
sql-server
datetime
function
Jeremy
quelle
quelle
CONVERT(smalldatetime, 0)
für verwendensmalldatetime
.Antworten:
Sie können eine benutzerdefinierte Funktion schreiben, die den Mindestdatumswert wie folgt zurückgibt:
Verwenden Sie diese Funktion dann in Ihren Skripten. Wenn Sie sie jemals ändern müssen, gibt es nur einen Ort, an dem Sie dies tun können.
Alternativ können Sie diese Abfrage verwenden, wenn Sie sie zur besseren Lesbarkeit bevorzugen:
Beispielfunktion
Verwendung
quelle
'1753-1-1'
ist das viel besser als-53690
cast('17530101' as datetime)
werden auch regionale Probleme vermieden und sind etwas besser lesbar als -53690.Haben Sie das SqlDateTime-Objekt gesehen ? Verwenden Sie
SqlDateTime.MinValue
, um Ihr Mindestdatum (1. Januar 1753) zu erhalten.quelle
Da ich die akzeptierte Antwort aufgrund unzureichender Reputationspunkte nicht kommentieren kann, kommt mein Kommentar als Antwort.
Die Verwendung von
select cast('1753-1-1' as datetime)
ist fehlgeschlagen, wenn sie in einer Datenbank mit regionalen Einstellungen ausgeführt wird, die keinen Datenstring im Format JJJJ-MM-TT akzeptiert.Verwenden Sie stattdessen das
select cast(-53690 as datetime)
oder einConvert
mit dem angegebenen Datum / Uhrzeit-Format.quelle
Geben Sie das Datum als nativen Wert ein
'yyyymmdd'
, um regionale Probleme zu vermeiden:Ja, es wäre toll, wenn TSQL es hätte
MinDate() = '00010101'
, aber kein solches Glück.quelle
Hier ist eine schnelle und gut lesbare Methode, um den Mindestdatumswert zu ermitteln
Hinweis: Dies ist eine deterministische Funktion. Um die Leistung weiter zu verbessern, können wir WITH SCHEMABINDING auch auf den Rückgabewert anwenden.
Erstellen Sie eine Funktion
Rufen Sie die Funktion auf
Beispiel 1
Beispiel 2
Beispiel 3
Beispiel 4
Beispiel 5
quelle
Es ist nicht der 1. Januar 1753, sondern wählen Sie cast ('' as datetime) aus, was Folgendes anzeigt: 1900-01-01 00: 00: 00.000 gibt den Standardwert von SQL Server an. (Sieht für mich sowieso uninitialisierter aus)
quelle
SELECT CONVERT(DATETIME, 0)
), aber der tatsächliche Mindestwert, den die Datumszeit in SQL Server halten kann, ist tatsächlich 1753, was OP geschrieben hat. Dann wechselte Amerika auch zum Gregorianischen Kalender und SQL Server muss sich nicht mit fehlenden Tagen usw. befassen. EsSELECT CONVERT(DATETIME, -53690)
gibt1753-01-01 00:00:00.000
undSELECT CONVERT(DATETIME, -53691)
gibt einen Fehler über einen Überlauf.Dies ist, was ich verwende, um das Mindestdatum in SQL Server zu erhalten. Bitte beachten Sie, dass es globalisierungsfreundlich ist:
Rufen Sie an mit:
quelle
Der Bereich für
datetime
ändert sich nicht, da dies die Abwärtskompatibilität beeinträchtigen würde. Sie können es also hart codieren.quelle
convert
macht, aber dafürGetMinDate()
müsste ich in die Funktionsdefinition eintauchen. Wenn ich also Ihren Code pflegen müsste, würde ich dieconvert
Variante bevorzugen .convert
tut, aber Sie würden nicht unbedingt die Bedeutung von kennen1753-1-1
.