Frage

Ich versuche, den Datums-Teil eines Zeitstempels in meiner zu verwenden, in dem die Abfrage in einem DB2-Pass-Through-SQL-Code unten ist.Ich habe versucht, Datums- und Datumspart-Funktionen zu verwenden, aber es funktioniert nicht mit diesem Format.Kennt jemand den Namen der Funktion, die in demselben Code unten verwendet wird?

generasacodicetagpre.

War es hilfreich?

Lösung

Wenn Sie eine Funktion im Datetime-Feld in DB2 verwenden, kann die Datenbank seine Indizes nicht verwenden (falls dieses Feld indiziert ist). Dies liegt daran, dass Indizes (fast immer) auf dem Feld selbst erstellt werden, nicht das Ergebnis des Feldes, nachdem er von einer Funktion verarbeitet wurde. Dies gilt für die Mehrheit der Datenbanken nicht nur nur db2.

stattdessen, was Sie tun möchten, ist für den Beginn des Tages und für das Ende des Tages dateTime-Werte zu versorgen und erhalten alles dazwischen. Um diesen Prozess zu vereinfachen, habe ich ein Format erstellt, das genannt genannt genannt genannt wird. Ursprünglich war dieses Format für eine MySQL-Datenbank, aber SQL Server und DB2 verwenden jedoch beide die gleichen Formate, sodass sie auch solche verwendet werden können:

generasacodicetagpre.

Wenn dieses Format verfügbar ist, neige ich dazu, Makrovariablen zu verwenden. An der Spitze meines Programms würde ich eine Makrovariable erstellen, in der ich den Datum anlege, der während des Berichts verwendet wird:

generasacodicetagpre.

Ich würde dann zwei DateTime-Felder erstellen, die den Start des Tages und das Ende des Tages darstellen, und ich würde sie in dem Format speichern, das für die SQL-Anweisung erforderlich ist:

generasacodicetagpre.

Sie würden dann Ihre Abfrage ändern, um so auszusehen:

generasacodicetagpre.

Auf diese Weise werden nicht nur Ihre Indizes jetzt in Ihrer Abfrage verwendet, sondern die SQL sieht sauberer aus und liefert einfacher und Sie müssen nur das Berichtsdatum an einem einzelnen Ort ändern (an der Spitze Ihres Programms), wenn Sie benötigen um Ihren Bericht erneut zu machen.

Andere Tipps

Im Allgemeinen müssen Sie die richtige DB2-Syntax verwenden.Ich kenne db2 nicht, aber dieses Papier deckt abdas ziemlich gut.Speziell:

generasacodicetagpre.

Es sieht so aus, als wäre Ihre Anfrage

wäre generasacodicetagpre.

Dieser Artikel von IBM scheint das vorzuschlagenEs gibt andere Formate, andere als Zeitstempel (was oben ist).Sie müssen daher je nach Format einen anderen verwenden.

Ich glaube, Sie sollten SAS-Datum-Literal verwenden.Also:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top