Mehr

Konvertieren des DateTime-Felds in Nur Datum im Label-Ausdruck


Ich habe ein DateTime-Feld (zB CreatedDate) und möchte nur das Datum mit dem Label anzeigen. Wie würde ich den Label-Ausdruck einrichten, um dies mit Python zu tun?


Es ist lustig, dass der Python-Interpreter (Feldrechner) Arcgis-Datetime-Felder als Unicode-Texte behandelt. Um das Datum aus diesem String zu extrahieren, sollten wir es in datetime konvertieren und dann das Datum extrahieren und dann in einen String konvertieren!

Eigenständiger Code (vorausgesetzt, Sie haben eine Datums-/Uhrzeitformatierung wie08.10.2015 03:24:53):

print str(datetime.datetime.strptime(u'10.08.2015 3:24:53 AM',"%m/%d/%Y %H:%M:%S %p").date())

Label-Ausdruck (Python-Parser):

def FindLabel ( [DateModified] ): return str(datetime.datetime.strptime([DateModified],"%m/%d/%Y %H:%M:%S %p").date())

Das Datum in einem DateTime-Feld besteht aus den ersten 10 Zeichen des Felds.

Ich habe Folgendes in einem Feld namens . versucht letztes_editiertes_datum.

Legen Sie in Ihrem Label-Ausdruck Ihren Parser auf Python fest.

Aktivieren Sie das Kontrollkästchen Erweitert und legen Sie Ihren Ausdruck wie folgt fest:

def FindLabel ( [last_edited_date] ): Rückgabe [last_edited_date][:10]

Und ändern letztes_editiertes_datum wie auch immer Ihr Feld genannt wird. Der Schlüssel hier ist, die String-Slicing-Fähigkeit von Python zu verwenden. Das ist, [:10] um die ersten 10 Zeichen des Feldes zu erhalten.

Die Ergebnisse sehen so aus:


Formatieren Sie ein Datums- und Uhrzeitfeld

Die Datentypen für Datum und Uhrzeit verfügen über eine Vielzahl von Formaten, um Ihren besonderen Umständen gerecht zu werden. Beim Formatieren haben Sie drei Möglichkeiten: Behalten Sie die Standardformate bei, wenden Sie ein vordefiniertes Format an oder erstellen Sie ein benutzerdefiniertes Format. Wenn Sie ein Format auf ein Tabellenfeld anwenden, wird dasselbe Format automatisch auf alle Formular- oder Berichtssteuerelemente angewendet, die Sie anschließend an dieses Tabellenfeld binden. Die Formatierung ändert nur die Anzeige der Daten und hat keinen Einfluss darauf, wie die Daten gespeichert werden oder wie Benutzer Daten eingeben können.


5 Antworten 5

Dies scheint zu funktionieren und auch die Präzision zu halten:

CAST to DATETIME2(7) wandelt den TIME(7)-Wert ( @T ) in einen DATETIME2 um, wobei der Datumsteil '1900-01-01' ist, was der Standardwert der Datums- und Datumszeittypen ist (siehe datetime2 und der Kommentar and * auf der CAST- und CONVERT-Seite bei MSDN.)

* . Wenn Zeichendaten, die nur Datums- oder nur Zeitkomponenten darstellen, in die Datentypen datetime oder smalldatetime umgewandelt werden, wird die nicht angegebene Zeitkomponente auf 00:00:00.000 gesetzt, und die nicht spezifizierte Datumskomponente ist auf 1900-01-01 eingestellt.

Die Funktion DATEADD() und DATEDIFF() erledigen den Rest, d. h. das Addieren der Differenz in Tagen zwischen dem 1900-01-01 und dem DATE-Wert ( @D ).

Wie @Quandary bemerkt, wird der obige Ausdruck von SQL Server als nicht deterministisch angesehen. Wenn wir einen deterministischen Ausdruck wollen, weil er beispielsweise für eine PERSISTED-Spalte verwendet werden soll, muss '19000101' ** durch 0 oder CONVERT(DATE, '19000101', 112) ersetzt werden:

**: DATEDIFF(day, '19000101', d) ist nicht deterministisch, da es eine implizite Konvertierung des Strings in DATETIME durchführt und Konvertierungen von Strings in Datetime nur dann deterministisch sind, wenn bestimmte Stile verwendet werden.


11 Antworten 11

Wenn der Spaltentyp in SQL DateTime ist, wird eine Zeit gespeichert, an der Sie eine übergeben oder nicht.

Es ist besser, das Datum richtig zu speichern:

und formatieren Sie es dann, wenn Sie es anzeigen müssen:

Oder wenn Sie EditorFor verwenden:

Um Ihrem Modell eine Eigenschaft hinzuzufügen, fügen Sie diesen Code hinzu:

Ich möchte für diese Antwort nur klarstellen, dass meine Aussage "Wenn Sie EditorFor verwenden" bedeutet, dass Sie eine EditorFor-Vorlage für den Werttyp benötigen, den Sie darstellen möchten.

Editor-Vorlagen sind eine coole Möglichkeit, sich wiederholende Steuerelemente in MVC zu verwalten:

Sie können sie für naive Typen wie String verwenden, wie ich es oben getan habe, aber sie eignen sich besonders gut, um eine Reihe von Eingabefeldern für einen komplizierteren Datentyp als Vorlage zu verwenden.

Musste mich gerade selbst mit diesem Szenario auseinandersetzen - habe einen wirklich einfachen Weg gefunden, dies zu tun, kommentieren Sie einfach Ihre Eigenschaft im Modell wie folgt:

Es wird auch die Zeitschaltfläche aus der Datumsauswahl ausblenden.

Entschuldigung, wenn diese Antwort etwas spät ist)

Dies funktioniert, wenn Sie in einer TextBox anzeigen möchten:

Das Datum/die Uhrzeit in der Datenbank wird nicht a formatiert Version überhaupt. Es wird nur das Datum/die Uhrzeit selbst sein. Wie du Anzeige das Datum/die Uhrzeit, wenn Sie den Wert aus der Datenbank extrahieren, ist eine andere Sache. Ich vermute stark, dass Sie wirklich nur wollen:

Ja, wenn Sie sich die Datenbank mit SQL Server Studio oder was auch immer ansehen, sehen Sie jetzt Mitternacht - aber das ist irrelevant, und wenn Sie das Datum aus der Datenbank holen und einem Benutzer anzeigen, dann Sie können das entsprechende Format anwenden.

BEARBEITEN: In Bezug auf Ihre bearbeitete Frage liegt das Problem nicht beim Modell - es ist die Art und Weise, wie Sie die Ansicht angeben. Sie sollten so etwas verwenden:

Dabei ist d der Standardbezeichner für das Datums- und Uhrzeitformat für das kurze Datumsmuster (was bedeutet, dass die aktuellen kulturellen Einstellungen berücksichtigt werden).

Das habe ich immer wieder gesagt - wenn du Datum/Uhrzeit für den Benutzer anzeigen, das ist die Zeit, um es als Datum ohne Uhrzeit zu formatieren.

BEARBEITEN: Wenn dies nicht funktioniert, sollte es eine Möglichkeit geben, das Modell oder die Ansicht mit einer Formatzeichenfolge zu dekorieren - oder so ähnlich. Ich bin nicht wirklich ein MVC-Typ, aber es fühlt sich so an sollen eine gute Möglichkeit, dies deklarativ zu tun.


Datetime-Funktionen in Standard-SQL

Alle Ausgaben werden automatisch nach ISO 8601 formatiert, wobei Datum und Uhrzeit durch ein T getrennt werden.

CURRENT_DATETIME

Beschreibung

Gibt die aktuelle Uhrzeit als DATETIME-Objekt zurück. Klammern sind optional, wenn sie ohne Argumente aufgerufen werden.

Diese Funktion unterstützt einen optionalen Zeitzonenparameter. Informationen zum Angeben einer Zeitzone finden Sie unter Zeitzonendefinitionen.

Rückgabedatentyp

Wenn eine Spalte namens current_datetime vorhanden ist, sind der Spaltenname und der Funktionsaufruf ohne Klammern mehrdeutig. Um den Funktionsaufruf sicherzustellen, fügen Sie Klammern hinzu, um den Spaltennamen sicherzustellen, und qualifizieren Sie ihn mit seiner Bereichsvariablen. Die folgende Abfrage wählt beispielsweise die Funktion in der Now-Spalte und die Tabellenspalte in der Spalte current_datetime aus.

TERMINZEIT

Beschreibung

  1. Erstellt ein DATETIME-Objekt mit INT64-Werten, die Jahr, Monat, Tag, Stunde, Minute und Sekunde darstellen.
  2. Erstellt ein DATETIME-Objekt unter Verwendung eines DATE-Objekts und eines optionalen TIME-Objekts.
  3. Erstellt ein DATETIME-Objekt mithilfe eines TIMESTAMP-Objekts. Es unterstützt einen optionalen Parameter, um eine Zeitzone anzugeben. Wenn keine Zeitzone angegeben ist, wird die Standardzeitzone UTC verwendet.

Rückgabedatentyp

EXTRAKT

Beschreibung

Gibt einen Wert zurück, der dem angegebenen Teil aus einem angegebenen datetime_expression entspricht.

  • MIKROSEKUNDE
  • MILLISEKUNDE
  • ZWEITE
  • MINUTE
  • STUNDE
  • WOCHENTAG
  • TAG
  • TAG DES JAHRES
  • WEEK : Gibt die Wochennummer des Datums im Bereich [0, 53] zurück. Wochen beginnen mit Sonntag, und Daten vor dem ersten Sonntag des Jahres liegen in Woche 0.
  • WEEK(<WEEKDAY>) : Gibt die Wochennummer von datetime_expression im Bereich [0, 53] zurück. Wochen beginnen am WOCHENTAG . datetime s vor dem ersten WOCHENTAG des Jahres sind in Woche 0. Gültige Werte für WOCHENTAG sind SONNTAG , MONTAG , DIENSTAG , MITTWOCH , DONNERSTAG , FREITAG und SAMSTAG .
  • ISOWEEK: Gibt die ISO 8601-Wochennummer von datetime_expression zurück. Die ISOWEEK s beginnen am Montag. Rückgabewerte liegen im Bereich [1, 53]. Die erste ISOWEEK eines jeden ISO-Jahres beginnt am Montag vor dem ersten Donnerstag des Gregorianischen Kalenderjahres.
  • MONAT
  • QUARTAL
  • JAHR
  • ISOYEAR : Gibt das Jahr der ISO 8601-Wochennummerierung zurück, das ist das Gregorianische Kalenderjahr, das den Donnerstag der Woche enthält, zu der date_expression gehört.
  • DATUM
  • ZEIT

Zurückgegebene Werte kürzen Zeiträume niedrigerer Ordnung. Beim Extrahieren von Sekunden schneidet EXTRACT beispielsweise die Millisekunden- und Mikrosekundenwerte ab.

Rückgabedatentyp

INT64 , außer in den folgenden Fällen:

Im folgenden Beispiel gibt EXTRACT einen Wert zurück, der dem Zeitteil HOUR entspricht.

Im folgenden Beispiel gibt EXTRACT Werte zurück, die verschiedenen Zeitabschnitten aus einer Spalte mit Datumsangaben entsprechen.

Im folgenden Beispiel fällt datetime_expression auf einen Sonntag. EXTRACT berechnet die erste Spalte anhand von Wochen, die am Sonntag beginnen, und berechnet die zweite Spalte anhand von Wochen, die am Montag beginnen.

DATETIME_ADD

Beschreibung

Fügt int64_expression-Einheiten von part zum DATETIME-Objekt hinzu.

DATETIME_ADD unterstützt die folgenden Werte für part :

  • MIKROSEKUNDE
  • MILLISEKUNDE
  • ZWEITE
  • MINUTE
  • STUNDE
  • TAG
  • WOCHE. Entspricht 7 DAY s.
  • MONAT
  • QUARTAL
  • JAHR

Für die Teile MONTH, QUARTER und YEAR ist eine besondere Behandlung erforderlich, wenn das Datum am (oder nahe) dem letzten Tag des Monats liegt. Wenn der resultierende Monat weniger Tage als der ursprüngliche DATETIME-Tag hat, ist der Ergebnistag der letzte Tag des neuen Monats.

Rückgabedatentyp

DATETIME_SUB

Beschreibung

Subtrahiert int64_expression-Einheiten von part von DATETIME .

DATETIME_SUB unterstützt die folgenden Werte für part :

  • MIKROSEKUNDE
  • MILLISEKUNDE
  • ZWEITE
  • MINUTE
  • STUNDE
  • TAG
  • WOCHE. Entspricht 7 DAY s.
  • MONAT
  • QUARTAL
  • JAHR

Für die Teile MONTH , QUARTER und YEAR ist eine besondere Behandlung erforderlich, wenn das Datum am (oder nahe) dem letzten Tag des Monats liegt. Wenn der resultierende Monat weniger Tage hat als der ursprüngliche DATETIME-Tag, ist der Ergebnistag der letzte Tag des neuen Monats.

Rückgabedatentyp

DATETIME_DIFF

Beschreibung

Gibt die Anzahl ganzer angegebener Teilintervalle zwischen zwei DATETIME-Objekten zurück ( datetime_expression_a - datetime_expression_b ). Wenn die erste DATETIME vor der zweiten liegt, ist die Ausgabe negativ. Löst einen Fehler aus, wenn die Berechnung den Ergebnistyp überläuft, beispielsweise wenn die Differenz in Mikrosekunden zwischen den beiden DATETIME-Objekten einen INT64-Wert überlaufen würde.

DATETIME_DIFF unterstützt die folgenden Werte für part :

  • MIKROSEKUNDE
  • MILLISEKUNDE
  • ZWEITE
  • MINUTE
  • STUNDE
  • TAG
  • WOCHE : Dieser Datumsteil beginnt am Sonntag.
  • WOCHE(<WEEKDAY>): Dieser Datumsteil beginnt am WOCHENTAG . Gültige Werte für WOCHENTAG sind SONNTAG, MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG und SAMSTAG.
  • ISOWEEK : Verwendet die Wochengrenzen nach ISO 8601. ISO-Wochen beginnen am Montag.
  • MONAT
  • QUARTAL
  • JAHR
  • ISOYEAR : Verwendet die ISO 8601-Wochennummerierungs-Jahresgrenze. Die ISO-Jahresgrenze ist der Montag der ersten Woche, deren Donnerstag zum entsprechenden gregorianischen Kalenderjahr gehört.

Rückgabedatentyp

Das obige Beispiel zeigt das Ergebnis von DATETIME_DIFF für zwei DATETIME s, die 24 Stunden auseinander liegen. DATETIME_DIFF mit dem Teil WEEK gibt 1 zurück, da DATETIME_DIFF die Anzahl der Teilgrenzen in diesem Bereich von DATETIME s zählt. Jede WOCHE beginnt am Sonntag, daher gibt es eine Teilgrenze zwischen Samstag, 14.10.2017 00:00:00 Uhr und Sonntag, 15.10.2017 00:00:00 Uhr .

Das folgende Beispiel zeigt das Ergebnis von DATETIME_DIFF für zwei Datumsangaben in unterschiedlichen Jahren. DATETIME_DIFF mit dem Datumsteil YEAR gibt 3 zurück, da es die Anzahl der gregorianischen Kalenderjahrgrenzen zwischen den beiden DATETIME s zählt. DATETIME_DIFF mit dem Datumsteil ISOYEAR gibt 2 zurück, da die zweite DATETIME zum ISO-Jahr 2015 gehört. Der erste Donnerstag des Kalenderjahres 2015 war der 01.01.2015, das ISO-Jahr 2015 beginnt also am vorhergehenden Montag, 29.12.2014 .

Das folgende Beispiel zeigt das Ergebnis von DATETIME_DIFF für zwei aufeinander folgende Tage. Das erste Datum fällt auf einen Montag und das zweite Datum auf einen Sonntag. DATETIME_DIFF mit dem Datumsteil WEEK gibt 0 zurück, da dieser Zeitteil Wochen verwendet, die am Sonntag beginnen. DATETIME_DIFF mit dem Datumsteil WEEK(MONDAY) gibt 1 zurück. DATETIME_DIFF mit dem Datumsteil ISOWEEK gibt ebenfalls 1 zurück, da ISO-Wochen am Montag beginnen.

DATETIME_TRUNC

Beschreibung

Schneidet ein DATETIME-Objekt auf die Granularität von part ab.

DATETIME_TRUNC unterstützt die folgenden Werte für part :

  • MIKROSEKUNDE
  • MILLISEKUNDE
  • ZWEITE
  • MINUTE
  • STUNDE
  • TAG
  • WOCHE
  • WEEK(<WEEKDAY>) : Kürzt datetime_expression auf die Grenze der vorherigen Woche, wobei die Wochen am WEEKDAY beginnen. Gültige Werte für WOCHENTAG sind SONNTAG, MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG und SAMSTAG.
  • ISOWEEK : Kürzt datetime_expression auf die vorhergehende ISO 8601-Wochengrenze. Die ISOWEEK s beginnen am Montag. Die erste ISOWEEK eines jeden ISO-Jahres enthält den ersten Donnerstag des entsprechenden Gregorianischen Kalenderjahres. Jeder date_expression früher als dieser wird auf den vorhergehenden Montag gekürzt.
  • MONAT
  • QUARTAL
  • JAHR
  • ISOYEAR : Kürzt datetime_expression auf die vorhergehende ISO 8601-Wochennummerierungsjahresgrenze. Die ISO-Jahresgrenze ist der Montag der ersten Woche, deren Donnerstag zum entsprechenden gregorianischen Kalenderjahr gehört.

Rückgabedatentyp

Im folgenden Beispiel fällt die ursprüngliche DATETIME auf einen Sonntag. Da der Teil WEEK(MONDAY) ist, gibt DATE_TRUNC die DATETIME für den vorhergehenden Montag zurück.

Im folgenden Beispiel befindet sich der ursprüngliche datetime_expression im gregorianischen Kalenderjahr 2015. DATETIME_TRUNC mit dem ISOYEAR-Datumsteil kürzt den datetime_expression jedoch auf den Anfang des ISO-Jahres, nicht auf das gregorianische Kalenderjahr. Der erste Donnerstag des Kalenderjahres 2015 war der 01.01.2015, das ISO-Jahr 2015 beginnt also am vorhergehenden Montag, dem 29.12.2014. Daher ist die ISO-Jahresgrenze vor datetime_expression 2015-06-15 00:00:00 2014-12-29.

FORMAT_DATETIME

Beschreibung

Formatiert ein DATETIME-Objekt gemäß der angegebenen format_string . Eine Liste der von dieser Funktion unterstützten Formatelemente finden Sie unter Unterstützte Formatelemente für DATETIME.

Rückgabedatentyp

LETZTER TAG

Beschreibung

Gibt den letzten Tag aus einem datetime-Ausdruck zurück, der das Datum enthält. Dies wird häufig verwendet, um den letzten Tag des Monats zurückzugeben.

Sie können optional den Datumsteil angeben, für den der letzte Tag zurückgegeben wird. Wenn dieser Parameter nicht verwendet wird, ist der Standardwert MONTH . LAST_DAY unterstützt die folgenden Werte für date_part :

  • JAHR
  • QUARTAL
  • MONAT
  • WOCHE. Entspricht 7 DAY s.
  • WOCHE(<WOCHENTAG>) . <WEEKDAY> steht für den Starttag der Woche. Gültige Werte sind SONNTAG, MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG und SAMSTAG.
  • ISOWOCHE . Verwendet ISO 8601-Wochengrenzen. ISO-Wochen beginnen am Montag.
  • ISOJAHR . Verwendet die ISO 8601-Wochennummerierungs-Jahresgrenze. Die ISO-Jahresgrenze ist der Montag der ersten Woche, deren Donnerstag zum entsprechenden gregorianischen Kalenderjahr gehört.

Rückgabedatentyp

Diese geben beide den letzten Tag des Monats zurück:

Dies gibt den letzten Tag des Jahres zurück:

Dies gibt den letzten Tag der Woche für eine Woche zurück, die an einem Sonntag beginnt:

Dies gibt den letzten Tag der Woche für eine Woche zurück, die an einem Montag beginnt:

PARSE_DATETIME

Beschreibung

format_string enthält die Formatelemente, die definieren, wie datetime_string formatiert wird. Jedes Element in datetime_string muss ein entsprechendes Element in format_string haben. Die Position jedes Elements in format_string muss mit der Position jedes Elements in datetime_string übereinstimmen.

Die Formatzeichenfolge unterstützt die meisten Formatelemente vollständig, außer %Q , %a , %A , %g , %G , %j , %P , %u , %U , %V , %w und %W .

PARSE_DATETIME parst String nach den folgenden Regeln:

  • Nicht angegebene Felder. Jedes nicht spezifizierte Feld wird von 1970-01-01 00:00:00.0 initialisiert. Wenn das Jahr beispielsweise nicht angegeben ist, wird standardmäßig 1970 verwendet.
  • Bei Namen wird die Groß-/Kleinschreibung nicht beachtet. Bei Namen wie Montag und Februar wird die Groß-/Kleinschreibung nicht beachtet.
  • Leerzeichen. Ein oder mehrere aufeinanderfolgende Leerzeichen in der Formatzeichenfolge stimmen mit null oder mehr aufeinanderfolgenden Leerzeichen in der DATETIME-Zeichenfolge überein. Führende und nachgestellte Leerzeichen in der DATETIME-Zeichenfolge sind immer zulässig, auch wenn sie nicht in der Formatzeichenfolge enthalten sind.
  • Vorrang formatieren. Wenn zwei oder mehr Formatelemente überlappende Informationen aufweisen, überschreibt das letzte im Allgemeinen alle früheren, mit einigen Ausnahmen. Beispielsweise wirken sich sowohl %F als auch %Y auf das Jahr aus, sodass das frühere Element das spätere überschreibt. Siehe die Beschreibungen von %s , %C und %y in Unterstützte Formatelemente für DATETIME.

Rückgabedatentyp

In den folgenden Beispielen wird ein STRING-Literal als DATETIME geparst.

Im folgenden Beispiel wird ein STRING-Literal analysiert, das ein Datum in einem natürlichen Sprachformat als DATETIME enthält.

Unterstützte Formatelemente für DATETIME

Sofern nicht anders angegeben, unterstützen DATETIME-Funktionen, die Formatzeichenfolgen verwenden, die folgenden Elemente:

Formatelement Beschreibung Beispiel
%EIN Der vollständige Wochentagname. Mittwoch
%ein Der abgekürzte Wochentagsname. Heiraten
%B Der vollständige Monatsname. Januar
%b oder %h Der abgekürzte Monatsname. Jan
%C Das Jahrhundert (ein Jahr geteilt durch 100 und auf eine ganze Zahl gekürzt) als Dezimalzahl (00-99). 20
%c Die Darstellung von Datum und Uhrzeit. Mi 20 Jan 21:47:00 2021
%D Das Datum im Format %m/%d/%y. 01/20/21
%d Der Tag des Monats als Dezimalzahl (01-31). 20
%e Der Tag des Monats als Dezimalzahl (1-31) einstelligen Ziffern wird ein Leerzeichen vorangestellt. 20
%F Das Datum im Format %Y-%m-%d. 2021-01-20
%G Das ISO 8601-Jahr mit Jahrhundert als Dezimalzahl. Jedes ISO-Jahr beginnt am Montag vor dem ersten Donnerstag des Gregorianischen Kalenderjahres. Beachten Sie, dass %G und %Y in der Nähe der Grenzen des Gregorianischen Jahres unterschiedliche Ergebnisse liefern können, wo das Gregorianische Jahr und das ISO-Jahr abweichen können. 2021
%G Das ISO 8601-Jahr ohne Jahrhundert als Dezimalzahl (00-99). Jedes ISO-Jahr beginnt am Montag vor dem ersten Donnerstag des Gregorianischen Kalenderjahres. Beachten Sie, dass %g und %y in der Nähe der Grenzen des Gregorianischen Jahres unterschiedliche Ergebnisse liefern können, wo das Gregorianische Jahr und das ISO-Jahr abweichen können. 21
%H Die Stunde (24-Stunden-Uhr) als Dezimalzahl (00-23). 21
%ICH Die Stunde (12-Stunden-Uhr) als Dezimalzahl (01-12). 09
%j Der Tag des Jahres als Dezimalzahl (001-366). 020
%k Die Stunde (24-Stunden-Uhr) als Dezimalzahl (0-23) einstelligen Ziffern wird ein Leerzeichen vorangestellt. 21
%l Die Stunde (12-Stunden-Uhr) als Dezimalzahl (1-12) einstelligen Ziffern wird ein Leerzeichen vorangestellt. 9
%M Die Minute als Dezimalzahl (00-59).
%m Der Monat als Dezimalzahl (01-12). 01
%n Ein Newline-Zeichen.
%P Entweder morgens oder abends. pm
%p Entweder AM oder PM. PN
%Q Das Viertel als Dezimalzahl (1-4). 1
%R Die Uhrzeit im Format %H:%M. 21:47
%r Die 12-Stunden-Uhrzeit mit AM/PM-Notation. 21:47:00 Uhr
%S Die Sekunde als Dezimalzahl (00-60). 00
%s Die Anzahl der Sekunden seit dem 01.01.1970 00:00:00. Überschreibt immer alle anderen Formatelemente, unabhängig davon, wo %s in der Zeichenfolge erscheint. Wenn mehrere %s-Elemente erscheinen, hat das letzte Vorrang. 1611179220
%T Die Uhrzeit im Format %H:%M:%S. 21:47:00
%t Ein Tabulatorzeichen.
%U Die Wochennummer des Jahres (Sonntag als erster Tag der Woche) als Dezimalzahl (00-53). 03
%u Der Wochentag (Montag als erster Tag der Woche) als Dezimalzahl (1-7). 3
%V Die ISO 8601-Wochenzahl des Jahres (Montag als erster Tag der Woche) als Dezimalzahl (01-53). Wenn die Woche mit dem 1. Januar vier oder mehr Tage im neuen Jahr hat, ist es Woche 1, ansonsten ist es Woche 53 des Vorjahres und die nächste Woche ist Woche 1. 03
%W Die Wochennummer des Jahres (Montag als erster Tag der Woche) als Dezimalzahl (00-53). 03
%w Der Wochentag (Sonntag als erster Tag der Woche) als Dezimalzahl (0-6). 3
%X Die Zeitdarstellung im Format HH:MM:SS. 21:47:00
%x Die Datumsdarstellung im MM/DD/YY-Format. 01/20/21
%Y Das Jahr mit Jahrhundert als Dezimalzahl. 2021
%y Das Jahr ohne Jahrhundert als Dezimalzahl (00-99), optional mit führender Null. Kann mit %C gemischt werden. Wenn %C nicht angegeben wird, sind die Jahre 00-68 2000er Jahre, während die Jahre 69-99 1900er Jahre sind. 21
%% Ein einzelnes %-Zeichen. %
%E#S Sekunden mit # Ziffern mit Bruchgenauigkeit. 00.000
%E*S Sekunden mit voller Bruchgenauigkeit (ein wörtliches '*'). 00
%E4Y Vierstellige Jahre (0001 . 9999). Beachten Sie, dass %Y so viele Zeichen erzeugt, wie zum vollständigen Rendern des Jahres erforderlich sind. 2021

Sofern nicht anders angegeben, ist der Inhalt dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Website-Richtlinien für Entwickler von Google. Java ist eine eingetragene Marke von Oracle und/oder seinen verbundenen Unternehmen.


Die Methoden, die Sie verwenden können, um Zeichenfolgendarstellungen von Datums-/Uhrzeitwerten zwischen X++ und .NET zu übergeben, sind wie folgt:

System.DateTime.GetDateTimeFormats (Geben Sie ein System.Char von s ein.)

Weder System.Convert::ToString noch System.DateTime.ToString geben ein Format aus, das von DateTimeUtil::Parse eingegeben werden kann.

ISO-String-Format für Datum/Uhrzeit

Das Ausgabeformat von DateTimeUtil::toStr und System.DateTime.GetDateTimeFormats ist yyyy-mm-ddThh:mm:ss im 24-Stunden-Format (kein nachgestelltes AM oder PM) mit führenden Nullen. Beispielsweise würde der 20. Juli 2007 um 13:45 Uhr ausgegeben als 2007-07-20T13:45:00. Dieses Zeichenfolgenformat ist ein Standard der International Standards Organization (ISO).

Dieses ISO-String-Format wird in DateTimeUtil::parse und System.DateTime::Parse eingegeben. um die Zeichenfolge in einen Datums-/Uhrzeittyp zu konvertieren.

Beispiel für die Konvertierung zwischen Datum/Uhrzeit und Zeichenfolge

Das folgende X++-Codebeispiel zeigt, wie kompatible Zeichenfolgen zwischen .NET und X++ übergeben und in Datums-/Uhrzeitvariablen konvertiert werden können.


Über die "QS-Tipps"

Die W3C-QA-Tipps sind kurze Dokumente, die nützliche Informationen für Webentwickler oder -designer erklären und von der Quality Assurance Interest Group des W3C gehostet und produziert werden.

Obwohl die Tipps von den Teilnehmern der Gruppe sorgfältig überprüft werden, sollten sie nur als informative Weisheiten angesehen werden, und vor allem sind sie es nicht normative technische Spezifikationen des W3C.

Erfahren Sie mehr über die Tipps, wie Sie Ihre eigenen Weisheiten einreichen und finden Sie alle anderen QS-Tipps im Tipps-Index.

Copyright & Kopie 1994-2006 W3C ® (MIT , ERCIM , Keio), Alle Rechte vorbehalten. Es gelten die W3C-Haftungs-, Marken-, Dokumentnutzungs- und Softwarelizenzbestimmungen. Ihre Interaktionen mit dieser Website stehen in Übereinstimmung mit unseren öffentlichen Datenschutzerklärungen und den Datenschutzerklärungen für Mitglieder.


Sie können keine leere Zeichenfolge abrufen, da Sie den DATE-Werttyp von ISNULL zurückgeben.

Gibt denselben Typ wie check_expression zurück. Wenn als check_expression ein Literal NULL bereitgestellt wird, wird der Datentyp des replace_value zurückgegeben. Wenn als Prüfausdruck ein Literal NULL und kein Ersatzwert angegeben wird, wird ein int zurückgegeben.

Wenn Sie überprüfen, ob der Wert NULL ist oder nicht, müssen Sie ihn nicht in ein Datum konvertieren, es sei denn, Sie möchten einen Datumswert zurückgeben (was Sie anscheinend nicht tun).

Ein NULL-Datum ist NULL (kein Wert). Eine leere Zeichenfolge hingegen wird zu 0 ausgewertet, was in SQL Server implizit eine ganze Zahl ist, die die Anzahl der Tage seit 1900-01-01 darstellt.


Impala Datums- und Zeitfunktionen

Die zugrunde liegenden Impala-Datentypen für Datums- und Uhrzeitdaten sind TIMESTAMP und DATE .

  • Die Einstellung ist standardmäßig deaktiviert, was bedeutet, dass Funktionen wie FROM_UNIXTIME() und UNIX_TIMESTAMP() die Eingabewerte immer als die UTC-Zeitzone darstellen.
  • Die Einstellung gilt auch, wenn Sie CAST() einen BIGINT-Wert in TIMESTAMP oder einen TIMESTAMP-Wert in BIGINT verwenden. Wenn diese Einstellung aktiviert ist, werden diese Funktionen und Operationen in und aus Werten konvertiert, die die lokale Zeitzone darstellen. Siehe TIMESTAMP-Datentyp für Details darüber, wie Impala Zeitzonenüberlegungen für den TIMESTAMP-Datentyp handhabt.

Funktionsreferenz:

Impala unterstützt die folgenden Datums- und Uhrzeitfunktionen:

  • ADD_MONTHS
  • DATUM HINZUFÜGEN
  • AKTUELLES DATUM
  • AKTUELLER ZEITSTEMPEL
  • DATE_ADD
  • DATE_PART
  • DATE_SUB
  • DATE_TRUNC
  • DATEDIFF
  • TAG
  • TAGSNAME
  • WOCHENTAG
  • TAG DES JAHRES
  • DAYS_ADD
  • DAYS_SUB
  • EXTRAKT
  • FROM_TIMESTAMP
  • FROM_UNIXTIME
  • FROM_UTC_TIMESTAMP
  • STUNDE
  • HOURS_ADD
  • HOURS_SUB
  • INT_MONTHS_BETWEEN
  • MICROSECONDS_ADD
  • MICROSECONDS_SUB
  • MILLISEKUNDE
  • MILLISECONDS_ADD
  • MILLISECONDS_SUB
  • MINUTE
  • MINUTES_ADD
  • MINUTES_SUB
  • MONAT
  • MONATSNAME
  • MONTHS_ADD
  • MONTHS_BETWEEN
  • MONTHS_SUB
  • NANOSECONDS_ADD
  • NANOSECONDS_SUB
  • NÄCHSTER TAG
  • JETZT
  • QUARTAL
  • ZWEITE
  • SECONDS_ADD
  • SECONDS_SUB
  • UNTERNEHMEN
  • UHRZEIT
  • TIMESTAMP_CMP
  • MITEINANDER AUSGEHEN
  • TO_TIMESTAMP
  • TO_UTC_TIMESTAMP
  • TRUNC
  • UNIX_TIMESTAMP
  • UTC_TIMESTAMP
  • WOCHENJAHR
  • WEEKS_ADD
  • WOCHEN_SUB
  • JAHR
  • JAHRE_ADD
  • JAHRE_SUB

Nutzungshinweise:

Wie MONTHS_ADD() . Erhältlich in Impala 1.4 und höher. Für Kompatibilität beim Portieren von Code mit Herstellererweiterungen.

HINZUFÜGEN (TIMESTAMP / DATE Datum, INT / BIGINT Tage) Zweck: Fügt Tage zum Datum hinzu und gibt den neuen Datumswert zurück.

Der Tageswert kann negativ sein, was das gleiche Ergebnis wie die Funktion SUBDATE() liefert.

Alle Verweise auf die Funktion CURRENT_DATE() werden zu Beginn einer Abfrage ausgewertet. Alle Aufrufe von CURRENT_DATE() innerhalb derselben Abfrage geben denselben Wert zurück, und der Wert hängt nicht davon ab, wie lange die Abfrage dauert.

Rückgabetyp: DATUM

AKTUELLER ZEITSTEMPEL() Zweck: Alias ​​für die Funktion NOW().

Rückgabetyp: ZEITSTEMPEL

DATE_ADD(TIMESTAMP / DATE Datum, INT / BIGINT Tage), DATE_ADD(TIMESTAMP / DATE Datum, Intervall_Ausdruck) Zweck: Fügt dem Datumsargument eine angegebene Anzahl von Tagen hinzu. Mit einem INTERVAL-Ausdruck als zweitem Argument können Sie einen Deltawert mit anderen Einheiten wie Wochen, Jahren, Stunden, Sekunden usw. berechnen. Weitere Informationen finden Sie unter TIMESTAMP-Datentyp.

Die folgenden Beispiele zeigen die Kurzschreibweise eines INTERVAL-Ausdrucks, anstatt die genaue Anzahl von Tagen anzugeben. Mit der INTERVAL-Notation können Sie auch mit Einheiten arbeiten, die kleiner als ein einzelner Tag sind.

Wie alle Datums-/Uhrzeitfunktionen, die mit Monaten arbeiten, behandelt date_add() nicht vorhandene Daten nach dem Ende eines Monats, indem es das Datum auf den letzten Tag des Monats setzt. Das folgende Beispiel zeigt, wie das nicht vorhandene Datum 31. April auf den 30. April normalisiert wird:

  • 0, wenn die Daten identisch sind.
  • 1 wenn Datum1 > Datum2 .
  • -1 wenn Datum1 < Datum2 .
  • NULL, wenn date1 oder date2 NULL ist.

Rückgabetyp: INT

DATE_PART(STRING-Teil, TIMESTAMP/DATE-Datum) Zweck: Ähnlich wie EXTRACT() , mit umgekehrter Argumentreihenfolge. Unterstützt dieselben Datums- und Zeiteinheiten wie EXTRACT() . Zur Kompatibilität mit SQL-Code, der Herstellererweiterungen enthält.

Rückgabetyp: BIGINT

DATE_SUB(TIMESTAMP Startdatum, INT Tage), DATE_SUB(TIMESTAMP Startdatum, Intervall_Ausdruck) Zweck: Subtrahiert eine angegebene Anzahl von Tagen von einem TIMESTAMP-Wert. Mit einem INTERVAL-Ausdruck als zweitem Argument können Sie einen Deltawert mit anderen Einheiten wie Wochen, Jahren, Stunden, Sekunden usw. berechnen. Weitere Informationen finden Sie unter TIMESTAMP-Datentyp.

Das folgende Beispiel zeigt die einfachste Anwendung, eine angegebene Anzahl von Tagen von einem TIMESTAMP-Wert zu subtrahieren:

Die folgenden Beispiele zeigen die Kurzschreibweise eines INTERVAL-Ausdrucks, anstatt die genaue Anzahl von Tagen anzugeben. Mit der INTERVAL-Notation können Sie auch mit Einheiten arbeiten, die kleiner als ein einzelner Tag sind.

Wie alle Datums-/Uhrzeitfunktionen, die mit Monaten arbeiten, behandelt date_add() nicht vorhandene Daten nach dem Ende eines Monats, indem es das Datum auf den letzten Tag des Monats setzt. Das folgende Beispiel zeigt, wie das nicht vorhandene Datum 31. April auf den 30. April normalisiert wird:

DATE_TRUNC(STRING-Einheit, TIMESTAMP / DATE ts) Zweck: Gibt den ts-Wert zurück, der auf die angegebene Einheit gekürzt wurde.

Streit: Beim Unit-Argument wird die Groß-/Kleinschreibung nicht beachtet. Diese Argumentzeichenfolge kann eine der folgenden sein:

Einheit Unterstützt für TIMESTAMP Unterstützt für DATE
'MIKROSEKUNDEN' Ja Nein
'MILLISEKUNDEN' Ja Nein
'ZWEITE' Ja Nein
'MINUTE' Ja Nein
'STUNDE' Ja Nein
'TAG' Ja Ja
'WOCHE' Ja Ja
'MONAT' Ja Ja
'JAHR' Ja Ja
'DEKADE' Ja Ja
'JAHRHUNDERT' Ja Ja
'MILLENNIUM' Ja Ja

Hinzugefügt in: Impala 2.11.0

Nutzungshinweise:

Obwohl diese Funktion dem Aufruf von TRUNC() mit einem TIMESTAMP- oder DATE-Argument ähnelt, unterscheiden sich die Reihenfolge der Argumente und die erkannten Einheiten zwischen TRUNC() und DATE_TRUNC() . Daher sind diese Funktionen nicht austauschbar.

Diese Funktion wird normalerweise in GROUP BY-Abfragen verwendet, um Ergebnisse aus derselben Stunde, demselben Tag, derselben Woche, demselben Monat, demselben Quartal usw. zu aggregieren. Sie können diese Funktion auch in einem INSERT verwenden. SELECT in eine partitionierte Tabelle, um TIMESTAMP- oder DATE-Werte in die richtige Partition aufzuteilen.

  • TIMESTAMP , wenn das zweite Argument ts TIMESTAMP ist.
  • DATE , wenn das zweite Argument, ts , DATE ist.

DATE_TRUNC('HOUR', NOW()) gibt 2017-12-05 13:00:00 zurück.

DATE_TRUNC('MILLENNIUM', DATE'2019-08-02') gibt 2001-01-01 zurück.

DATEDIFF(TIMESTAMP / DATE Enddatum, TIMESTAMP / DATE Startdatum) Zweck: Gibt die Anzahl der Tage vom Startdatum bis zum Enddatum zurück.

Wenn enddate > startdate ist, ist der Rückgabewert positiv.

Wenn enddate < startdate ist, ist der Rückgabewert negativ.

Wenn enddate = startdate ist, ist der Rückgabewert null.

Rückgabetyp: INT

Nutzungshinweise:

Die Zeitanteile der Enddatums- und Startdatumswerte werden ignoriert. 23:59 PM an einem Tag und 00:01 AM am nächsten Tag stellen beispielsweise ein DATEDIFF() von -1 dar, da die Datums-/Uhrzeitwerte verschiedene Tage darstellen, obwohl sich die TIMESTAMP-Werte nur um 2 Minuten unterscheiden.

TAG(ZEITSTEMPEL / DATUM Datum), DAYOFMONTH(ZEITSTEMPEL / DATUM Datum) Zweck: Gibt den Tageswert aus dem Datumsargument zurück. Der Wert stellt den Tag des Monats dar, liegt also im Bereich von 1-31 oder weniger für Monate ohne 31 Tage.

Gibt NULL für nicht vorhandene Daten zurück, z.B. 30. Februar oder falsch formatierte Datumszeichenfolgen, z. '1999-02-013' .

Rückgabetyp: INT

DAYNAME(TIMESTAMP / DATE Datum) Zweck: Gibt den Tagesnamen des Datumsarguments zurück. Der Bereich der Rückgabewerte ist 'Sonntag' bis 'Samstag' . Wird in berichtsgenerierenden Abfragen als Alternative zum Aufrufen von DAYOFWEEK() und zum Umwandeln dieses numerischen Rückgabewerts in eine Zeichenfolge mithilfe eines CASE-Ausdrucks verwendet.

Rückgabetyp: STRING

WOCHENTAG (ZEITSTEMPEL / DATUM Datum) Zweck: Gibt das Tagesfeld des Datumsarguments zurück, das dem Wochentag entspricht. Der Rückgabewert reicht von 1 (Sonntag) bis 7 (Samstag).

Rückgabetyp: INT

TAG DES JAHRES(ZEITSTEMPEL / DATUM Datum) Zweck: Gibt das Tagesfeld aus dem Datumsargument zurück, das dem Tag des Jahres entspricht. Der Bereich der Rückgabewerte reicht von 1 (1. Januar) bis 366 (31. Dezember eines Schaltjahres).

Rückgabetyp: INT

DAYS_ADD(TIMESTAMP / DATE Datum, INT / BIGINT Tage) Zweck: Gibt den Wert mit der zu date addierten Anzahl von Tagen zurück.

Streit: Beim Wert des Einheitenarguments wird die Groß-/Kleinschreibung nicht beachtet. Die Einheitenzeichenfolge kann eine der folgenden sein:

Einheit Unterstützt für TIMESTAMP ts Unterstützt für DATE ts
'EPOCHE' Ja Nein
'MILLISEKUNDE' Ja Nein
'ZWEITE' Ja Nein
'MINUTE' Ja Nein
'STUNDE' Ja Nein
'TAG' Ja Ja
'MONAT' Ja Ja
'QUARTAL' Ja Ja
'JAHR' Ja Ja

Nutzungshinweise:

Wird normalerweise in GROUP BY-Abfragen verwendet, um Ergebnisse nach Stunde, Tag, Monat usw. anzuordnen. Sie können diese Funktion auch in einem INSERT verwenden. SELECT-Anweisung zum Einfügen in eine partitionierte Tabelle, um TIMESTAMP-Werte in einzelne Teile aufzuteilen, wenn die partitionierte Tabelle separate Partitionsschlüsselspalten hat, die Jahr, Monat, Tag usw. darstellen. Wenn Sie durch komplexere Zeiteinheiten dividieren müssen, z. B. nach Woche oder Quartal, verwenden Sie stattdessen die Funktion TRUNC().

Rückgabetyp: BIGINT

EXTRACT(DAY FROM DATE'2019-08-17') gibt 17 zurück.

Wenn Sie 'MILLISECOND' für das Einheitenargument angeben, gibt die Funktion die Sekundenkomponente und die Millisekundenkomponente zurück.

EXTRACT(CAST('2006-05-12 18:27:28.123456789' AS TIMESTAMP), 'MILLISECOND') gibt 28123 zurück.

FROM_TIMESTAMP(TIMESTAMP datetime, STRING-Muster), FROM_TIMESTAMP(STRING datetime, STRING-Muster) Zweck: Konvertiert einen TIMESTAMP-Wert in eine Zeichenfolge, die denselben Wert darstellt.

Rückgabetyp: STRING

Nutzungshinweise:

Die Funktion FROM_TIMESTAMP() bietet eine flexible Möglichkeit, TIMESTAMP-Werte zu Berichtszwecken in beliebige Zeichenfolgenformate umzuwandeln.

Da Impala implizit Zeichenfolgenwerte in TIMESTAMP konvertiert, können Sie Datums-/Uhrzeitwerte, die als Zeichenfolgen dargestellt werden (im Standardformat jjjj-MM-tt HH:mm:ss.SSS), an diese Funktion übergeben. Das Ergebnis ist eine Zeichenfolge mit unterschiedlichen Trennzeichen, der Reihenfolge der Felder, ausgeschriebenen Monatsnamen oder einer anderen Variation der Darstellung der Datums-/Uhrzeitzeichenfolge.

Die zulässigen Token für die Musterzeichenfolge sind dieselben wie für die Funktion FROM_UNIXTIME().

FROM_UNIXTIME(BIGINT unixtime [, STRING-Muster]) Zweck: Konvertiert die Anzahl der Sekunden von der Unix-Epoche bis zur angegebenen Zeit in einen String in der lokalen Zeitzone.

Rückgabetyp: STRING

Die Musterzeichenfolge unterstützt die folgende Teilmenge von Java SimpleDateFormat.

Muster Beschreibung
ja Jahr
M Monat
d Tag
H Stunde
ich Minute
so Zweite
S Sekundenbruchteile
+/-hh:mm Zeitzonen-Offset
+/-hhmm Zeitzonen-Offset
+/-hh Zeitzonen-Offset

Für die Musterzeichenfolge gelten folgende Regeln:

  • Bei der Musterzeichenfolge wird die Groß-/Kleinschreibung beachtet.
  • Alle Felder haben eine variable Länge und müssen daher Trennzeichen verwenden, um die Grenzen der Felder anzugeben, mit Ausnahme der Zeitzonenwerte.
  • Time zone offset formats must be at the end of the pattern string.
  • Formatting character groups can appear in any order along with any separators except for the time zone offset. For example:
    • yyyy/MM/dd
    • dd-MMM-yy
    • (dd)(MM)(yyyy) HH:mm:ss
    • yyyy-MM-dd HH:mm:ss+hh:mm

    In Impala 1.3 and later, you can switch the order of elements, use alternative separator characters, and use a different number of placeholders for each unit. Adding more instances of y , d , H , and so on produces output strings zero-padded to the requested number of characters. The exception is M for months, where M produces a non-padded value such as 3 , MM produces a zero-padded value such as 03 , MMM produces an abbreviated month name such as Mar , and sequences of 4 or more M are not allowed.

    A date string including all fields could be 'yyyy-MM-dd HH:mm:ss.SSSSSS' , 'dd/MM/yyyy HH:mm:ss.SSSSSS' , 'MMM dd, yyyy HH.mm.ss (SSSSSS)' or other combinations of placeholders and separator characters.

    In Impala 2.2.0 and higher, built-in functions that accept or return integers representing TIMESTAMP values use the BIGINT type for parameters and return values, rather than INT . This change lets the date and time functions avoid an overflow error that would otherwise occur on January 19th, 2038 (known as the "Year 2038 problem" or "Y2K38 problem" ). This change affects the FROM_UNIXTIME() and UNIX_TIMESTAMP() functions. You might need to change application code that interacts with these functions, change the types of columns that store the return values, or add CAST() calls to SQL statements that call these functions.

    Usage notes:

    The way this function deals with time zones when converting to or from TIMESTAMP values is affected by the ‑‑use_local_tz_for_unix_timestamp_conversions startup flag for the impalad daemon. See TIMESTAMP Data Type for details about how Impala handles time zone considerations for the TIMESTAMP data type.

    FROM_UTC_TIMESTAMP(TIMESTAMP ts, STRING timezone) Purpose: Converts a specified UTC timestamp value into the appropriate value for a specified time zone.

    Return type: TIMESTAMP

    Usage notes: Often used to translate UTC time zone data stored in a table back to the local date and time for reporting. The opposite of the TO_UTC_TIMESTAMP() function.

    To determine the time zone of the server you are connected to, in Impala 2.3 and higher you can call the timeofday() function, which includes the time zone specifier in its return value. Remember that with cloud computing, the server you interact with might be in a different time zone than you are, or different sessions might connect to servers in different time zones, or a cluster might include servers in more than one time zone.

    See discussion of time zones in TIMESTAMP Data Type for information about using this function for conversions between the local time zone and UTC.

    HOUR(TIMESTAMP ts) Purpose: Returns the hour field from a TIMESTAMP field.

    Return type: INT

    HOURS_ADD(TIMESTAMP date, INT hours), HOURS_ADD(TIMESTAMP date, BIGINT hours) Purpose: Returns the specified date and time plus some number of hours.

    Return type: TIMESTAMP

    HOURS_SUB(TIMESTAMP date, INT hours), HOURS_SUB(TIMESTAMP date, BIGINT hours) Purpose: Returns the specified date and time minus some number of hours.

    Return type: TIMESTAMP

    INT_MONTHS_BETWEEN(TIMESTAMP / DATE enddate, TIMESTAMP / DATE startdate) Purpose: Returns the number of months from startdate to enddate , representing only the full months that passed.

    Return type: INT

    Added in: Impala 2.3.0

    Usage notes:

    Typically used in business contexts, for example to determine whether a specified number of months have passed or whether some end-of-month deadline was reached.

    The method of determining the number of elapsed months includes some special handling of months with different numbers of days that creates edge cases for dates between the 28th and 31st days of certain months. See MONTHS_BETWEEN() for details. The INT_MONTHS_BETWEEN() result is essentially the FLOOR() of the MONTHS_BETWEEN() result.

    If either value is NULL , which could happen for example when converting a nonexistent date string such as '2015-02-29' to a TIMESTAMP , the result is also NULL .

    If the first argument represents an earlier time than the second argument, the result is negative.

    LAST_DAY(TIMESTAMP / DATE ts) Purpose: Returns the beginning of the last calendar day in the same month of ts .

    • Returns TIMESTAMP if ts is of the TIMESTAMP type.
    • Returns DATE if ts is of the DATE type.

    Added in: Impala 2.9.0

    Usage notes:

    If the input argument does not represent a valid Impala TIMESTAMP including both date and time portions, the function returns NULL . For example, if the input argument is a string that cannot be implicitly cast to TIMESTAMP , does not include a date portion, or is out of the allowed range for Impala TIMESTAMP values, the function returns NULL .

    MICROSECONDS_ADD(TIMESTAMP date, INT microseconds), MICROSECONDS_ADD(TIMESTAMP date, BIGINT microseconds) Purpose: Returns the specified date and time plus some number of microseconds.

    Return type: TIMESTAMP

    MICROSECONDS_SUB(TIMESTAMP date, INT microseconds), MICROSECONDS_SUB(TIMESTAMP date, BIGINT microseconds) Purpose: Returns the specified date and time minus some number of microseconds.

    Return type: TIMESTAMP

    MILLISECOND(TIMESTAMP ts) Purpose: Returns the millisecond portion of a TIMESTAMP value.

    Return type: INT

    Added in: Impala 2.5.0

    Usage notes:

    The millisecond value is truncated, not rounded, if the TIMESTAMP value contains more than 3 significant digits to the right of the decimal point.

    MILLISECONDS_ADD(TIMESTAMP date, INT milliseconds), MILLISECONDS_ADD(TIMESTAMP date, BIGINT milliseconds) Purpose: Returns the specified date and time plus some number of milliseconds.

    Return type: TIMESTAMP

    MILLISECONDS_SUB(TIMESTAMP date, INT milliseconds), MILLISECONDS_SUB(TIMESTAMP date, BIGINT milliseconds) Purpose: Returns the specified date and time minus some number of milliseconds.

    Return type: TIMESTAMP

    MINUTE(TIMESTAMP date) Purpose: Returns the minute field from a TIMESTAMP value.

    Return type: INT

    MINUTES_ADD(TIMESTAMP date, INT minutes), MINUTES_ADD(TIMESTAMP date, BIGINT minutes) Purpose: Returns the specified date and time plus some number of minutes.

    Return type: TIMESTAMP

    MINUTES_SUB(TIMESTAMP date, INT minutes), MINUTES_SUB(TIMESTAMP date, BIGINT minutes) Purpose: Returns the specified date and time minus some number of minutes.

    Return type: TIMESTAMP

    MONTH(TIMESTAMP / DATE date) Purpose: Returns the month field, represented as an integer, from the date argument.

    Return type: INT

    MONTHNAME(TIMESTAMP / DATE date) Purpose: Returns the month name of the date argument.

    Return type: STRING

    MONTHS_ADD(TIMESTAMP / DATE date, INT / BIGINT months) Purpose: Returns the value with the number of months added to date .

    Usage notes:

    If date is the last day of a month, the return date will fall on the last day of the target month, e.g. MONTHS_ADD(DATE'2019-01-31', 1) returns DATE'2019-02-28' .

    MONTHS_BETWEEN(TIMESTAMP / DATE enddate, TIMESTAMP / DATE startdate) Purpose: Returns the number of months from startdate to enddate . This result can include a fractional part representing extra days in addition to the full months between the dates. The fractional component is computed by dividing the difference in days by 31 (regardless of the month).

    Return type: DOUBLE

    Added in: Impala 2.3.0

    Usage notes:

    Typically used in business contexts, for example to determine whether a specified number of months have passed or whether some end-of-month deadline was reached.

    If the only consideration is the number of full months and any fractional value is not significant, use INT_MONTHS_BETWEEN() instead.

    The method of determining the number of elapsed months includes some special handling of months with different numbers of days that creates edge cases for dates between the 28th and 31st days of certain months.

    If either value is NULL , which could happen for example when converting a nonexistent date string such as '2015-02-29' to a TIMESTAMP , the result is also NULL .

    If the first argument represents an earlier time than the second argument, the result is negative.

    The time portion of the input arguements are ignored.

    MONTHS_SUB(TIMESTAMP / DATE date, INT / BIGINT months) Purpose: Returns the value with the number of months subtracted from date .

    Usage notes:

    If date is the last day of a month, the return date will fall on the last day of the target month, e.g. MONTHS_SUB(DATE'2019-02-28', 1) returns DATE'2019-01-31' .

    NANOSECONDS_ADD(TIMESTAMP date, INT nanoseconds), NANOSECONDS_ADD(TIMESTAMP date, BIGINT nanoseconds) Purpose: Returns the specified date and time plus some number of nanoseconds.

    Return type: TIMESTAMP

    Kudu considerations:

    The nanosecond portion of an Impala TIMESTAMP value is rounded to the nearest microsecond when that value is stored in a Kudu table.

    NANOSECONDS_SUB(TIMESTAMP date, INT nanoseconds), NANOSECONDS_SUB(TIMESTAMP date, BIGINT nanoseconds) Purpose: Returns the specified date and time minus some number of nanoseconds.

    Return type: TIMESTAMP

    Kudu considerations:

    The nanosecond portion of an Impala TIMESTAMP value is rounded to the nearest microsecond when that value is stored in a Kudu table.

    NEXT_DAY(TIMESTAMP / DATE date, STRING weekday) Purpose: Returns the date of the weekday that follows the specified date .

    Argument: The weekday is not case-sensitive.

    The following values are accepted for weekday : "Sunday" / "Sun" , "Monday" / "Mon" , "Tuesday" / "Tue" , "Wednesday" / "Wed" , "Thursday" / "Thu" , "Friday" / "Fri" , "Saturday" / "Sat"

    • Returns TIMESTAMP if date is of the TIMESTAMP type.
    • Returns DATE if date is of the DATE type.

    NEXT_DAY('2013-12-25','Saturday') returns '2013-12-28 00:00:00' which is the first Saturday after December 25, 2013.

    NOW() Purpose: Returns the current date and time (in the local time zone) as a TIMESTAMP value.

    Return type: TIMESTAMP

    Usage notes:

    To find a date/time value in the future or the past relative to the current date and time, add or subtract an INTERVAL expression to the return value of NOW() . See TIMESTAMP Data Type for examples.

    To produce a TIMESTAMP representing the current date and time that can be shared or stored without interoperability problems due to time zone differences, use the TO_UTC_TIMESTAMP() function and specify the time zone of the server. When TIMESTAMP data is stored in UTC form, any application that queries those values can convert them to the appropriate local time zone by calling the inverse function, FROM_UTC_TIMESTAMP() .

    To determine the time zone of the server you are connected to, in Impala 2.3 and higher you can call the timeofday() function, which includes the time zone specifier in its return value. Remember that with cloud computing, the server you interact with might be in a different time zone than you are, or different sessions might connect to servers in different time zones, or a cluster might include servers in more than one time zone.

    Any references to the NOW() function are evaluated at the start of a query. All calls to NOW() within the same query return the same value, and the value does not depend on how long the query takes.

    QUARTER(TIMESTAMP / DATE date) Purpose: Returns the quarter in the input date argument as an integer value, 1, 2, 3, or 4, where 1 represents January 1 through March 31.

    Return type: INT

    SECOND(TIMESTAMP date) Purpose: Returns the second field from a TIMESTAMP value.

    Return type: INT

    SECONDS_ADD(TIMESTAMP date, INT seconds), SECONDS_ADD(TIMESTAMP date, BIGINT seconds) Purpose: Returns the specified date and time plus some number of seconds.

    Return type: TIMESTAMP

    SECONDS_SUB(TIMESTAMP date, INT seconds), SECONDS_SUB(TIMESTAMP date, BIGINT seconds) Purpose: Returns the specified date and time minus some number of seconds.

    Return type: TIMESTAMP

    SUBDATE(TIMESTAMP / DATE date, INT / BIGINT days) Purpose: Subtracts days from date and returns the new date value.

    The days value can be negative, which gives the same result as the ADDDATE() function.

    Return type: STRING

    Added in: Impala 2.3.0

    Usage notes: The result value represents similar information as the now() function, only as a STRING type and with somewhat different formatting. For example, the day of the week and the time zone identifier are included. This function is intended primarily for compatibility with SQL code from other systems that also have a timeofday() function. Prefer to use now() if practical for any new Impala code.

    If the first argument represents a later point in time than the second argument, the result is 1.

    If the first argument represents an earlier point in time than the second argument, the result is -1.

    If the first and second arguments represent identical points in time, the result is 0.

    If either argument is NULL , the result is NULL .

    Return type: INT (either -1, 0, 1, or NULL )

    Added in: Impala 2.3.0

    Usage notes:

    Usage notes: A comparison function for TIMESTAMP values that only tests whether the date and time increases, decreases, or stays the same. Similar to the SIGN() function for numeric values.

    TO_DATE(TIMESTAMP ts) Purpose: Returns a string representation of the date field from the ts argument.

    Return type: STRING

    TO_TIMESTAMP(BIGINT unixtime), TO_TIMESTAMP(STRING date, STRING pattern) Purpose: Converts an integer or string representing a date/time value into the corresponding TIMESTAMP value.

    Return type: TIMESTAMP

    Added in: Impala 2.3.0

    Usage notes:

    An integer argument represents the number of seconds past the epoch (midnight on January 1, 1970). It is the converse of the UNIX_TIMESTAMP() function, which produces a BIGINT representing the number of seconds past the epoch.

    A string argument, plus another string argument representing the pattern, turns an arbitrary string representation of a date and time into a true TIMESTAMP value. The ability to parse many kinds of date and time formats allows you to deal with temporal data from diverse sources, and if desired to convert to efficient TIMESTAMP values during your ETL process. Using TIMESTAMP directly in queries and expressions lets you perform date and time calculations without the overhead of extra function calls and conversions each time you reference the applicable columns.

    The following examples demonstrate how to convert an arbitrary string representation to TIMESTAMP based on a pattern string:

    The following examples show how to convert a BIGINT representing seconds past epoch into a TIMESTAMP value:

    TO_UTC_TIMESTAMP(TIMESTAMP ts, STRING timezone) Purpose: Converts a specified timestamp value in a specified time zone into the corresponding value for the UTC time zone.

    Return type: TIMESTAMP

    Usage notes:

    Often used in combination with the now() function, to translate local date and time values to the UTC time zone for consistent representation on disk. The opposite of the FROM_UTC_TIMESTAMP() function.

    See discussion of time zones in TIMESTAMP Data Type for information about using this function for conversions between the local time zone and UTC.

    The simplest use of this function is to turn a local date/time value to one with the standardized UTC time zone. Because the time zone specifier is not saved as part of the Impala TIMESTAMP value, all applications that refer to such data must agree in advance which time zone the values represent. If different parts of the ETL cycle, or different instances of the application, occur in different time zones, the ideal reference point is to convert all TIMESTAMP values to UTC for storage.

    Once a value is converted to the UTC time zone by TO_UTC_TIMESTAMP() , it can be converted back to the local time zone with FROM_UTC_TIMESTAMP() . You can combine these functions using different time zone identifiers to convert a TIMESTAMP between any two time zones. This example starts with a TIMESTAMP value representing Pacific Daylight Time, converts it to UTC, and converts it to the equivalent value in Eastern Daylight Time.

    TRUNC(TIMESTAMP / DATE ts, STRING unit) Purpose: Returns the ts truncated to the unit specified.

    Argument: The unit argument is not case-sensitive. This argument string can be one of:


    5 Answers 5

    I checked your profile and saw that you are in the UK. If your sql server is set to use the dateformat dmy then that explains your issue. Without using the 'T' instead of the space in the datetime string, Sql Server won't recognize it as ISO8601 format.

    Querying using dates and/or datetimes can be tricky, to make sure you are getting what you are looking for I recommend reading:

    edit: to clarify the out of range value in your error message would be from interpreting the month as 30 and the day as 11.

    I do not understand why the data is being converted from varchar to datetime when 'Created' is set to datetime

    The literals you are providing for comparison to the Created column are strings. To compare those literals with the datetime column, SQL Server attempts to convert the strings to datetime types, according to the rules of data type precedence. Without explicit information about the format of the strings, SQL Server follows its convoluted rules for interpreting strings as datetimes.

    In my view, the neatest way to avoid these types of issues is to be explicit about types. SQL Server provides the CAST and CONVERT functions for this purpose. When working with strings and date/time types, CONVERT is to be preferred because it provides a style parameter to explicitly define the string format.

    The question uses strings in ODBC canonical (with milliseconds) format (style 121). Being explicit about the data type and string style results in the following:

    That said, there are good reasons (as Aaron points out in his answer) to use a half-open range instead of BETWEEN (I use style 120 below just for variety):

    Being explicit about types is a very good habit to get into, particularly when dealing with dates and times.