SQL sucht nach Datum zwischen Werten oder Min / Max wenn NULL

8

Ich habe eine gespeicherte T-SQL-Prozedur, in der ich nach einem bestimmten Wert suchen und die Suche optional auf bestimmte Daten beschränken möchte, wenn sie übergeben werden. Wenn für eines dieser Daten Nullwerte übergeben werden, möchte ich das tun ignoriere diese. Die Art, wie ich darüber nachdenke, indem ich die Eingabedaten auf Minimum oder Maximum setze, wenn sie null sind. Ich würde es vorziehen, die minimalen und maximalen Werte nicht zu kodieren. Ich frage mich also, was das SQL-Äquivalent von C # DateTime.MaxValue und DateTime.MinValue ist.

Ich denke an die Verwendung von Coalesce wie folgt

%Vor%

Gibt es eine eingebaute Funktion / Konstante / Variable / enum, die ich für die Variablen <MinDateTime> und <MaxDateTime> verwenden kann?

Irgendwelche Vorschläge?

    
Chaitanya 20.09.2010, 07:33
quelle

3 Antworten

11

In SQL Server gibt es keine solche Funktionalität. Sie können die Mindest- und Höchstdaten in BOL (1753-01-01 - 9999) problemlos finden -12-31). Oder Sie können ein anderes Datum einfach hart codieren (wenn Sie wirklich mit Geburtstagen arbeiten, würde 1800-01-01 - 2100-12-31 wahrscheinlich ausreichen). Oder Sie könnten (wenn es die Bereichsabfrage ist, die Sie angezeigt haben), die Koaleszenz auf den Geburtstag selbst zurückfallen lassen:

%Vor%

Beachten Sie jedoch, dass dies bei sehr großen Tabellen nicht unbedingt gut skalierbar ist.

Bearbeitet nach accept, um auf einen Kommentar von OP zu antworten

Wenn Sie für SQL häufig "Referenz" -Daten benötigen, fügen Sie diese normalerweise selbst als Tabelle hinzu. (Google für "Kalender Tabelle" oder "Nummer Tabelle sql"). In diesem Fall könnten Sie also eine "Konstanten" (oder vielleicht auch "Limits" -Tabelle) hinzufügen:

%Vor%

Was Sie dann in Abfragen referenzieren könnten (entweder durch einen Subselect oder durch eine Kreuzverbindung mit dieser Tabelle). ZB

%Vor%

(Die Einschränkungen "Sperren", "Primärschlüssel" und "Prüfen" arbeiten zusammen, um sicherzustellen, dass in dieser Tabelle nur eine einzige Zeile existiert.)

    
Damien_The_Unbeliever 20.09.2010, 07:50
quelle
4

Für SQL Server gelten gemäß BOL die folgenden Einschränkungen:

  • datetime : 1753-01-01 00:00:00 bis 9999-12-31 23: 59: 59,997
  • smalldatetime : 1900-01-01 00:00:00 bis 2079-06-06 23: 59: 29.998
  • date : 0001-01-01 bis 9999-12-31
  • datetime2 : 0001-01-01 00:00:00 bis 9999-12-31 23: 59: 59.9999999

Wie Sie sehen, hängt das von Ihrem genauen Datentyp ab.

Wie für die Abfrage würde ich es so machen:

%Vor%     
Michel de Ruiter 20.09.2010 07:53
quelle
3

Es gibt keine eingebauten Funktionen, um die minimalen oder maximalen Datumswerte zu erhalten. Sie müssen die Werte fest codieren oder die Werte aus der Datenbank abrufen.

Wenn die Parameter NULL sind, können Sie einfach den min & amp; Maximale Daten von der Tabelle Employee .

%Vor%     
codingbadger 20.09.2010 07:39
quelle

Tags und Links