Allgemeine Datumsvergleichs- und Berechnungsfunktionen in MySQL

Allgemeine Datumsvergleichs- und Berechnungsfunktionen in MySQL

Implementierung des Zeitvergleichs in MySql

unix_timestamp()

Die Funktion unix_timestamp kann ein oder keine Argumente annehmen.

Der Rückgabewert ist eine vorzeichenlose Ganzzahl. Ohne Parameter gibt es die Anzahl der Sekunden zurück, die seit 00:00:00, 1. Januar 1970 vergangen sind.

Wenn ein Parameter vom Typ „Zeit“ oder eine Zeichenfolgendarstellung eines Zeittyps ist, handelt es sich um die Anzahl der Sekunden vom 01.01.1970, 00:00:00 Uhr, bis zur angegebenen Zeit.

Mit dieser Funktion ist es naheliegend, den Zeitvergleich in einen vorzeichenlosen Ganzzahlvergleich umzuwandeln.

Bestimmen Sie beispielsweise, ob eine Zeit innerhalb eines Bereichs liegt

unix_timestamp(Zeit) zwischen unix_timestamp('Start') und unix_timestamp('Ende')

Hier ist ein Beispiel mit der Verwendung der Datumsfunktionen.

Die folgende Abfrage wählt alle Datensätze aus, bei denen der Wert von date_col innerhalb der letzten 30 Tage liegt:

mysql> WÄHLE etwas AUS der Tabelle, WO TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;

DAYOFWEEK(Datum)

Gibt den Wochentagindex des Datums zurück (1=Sonntag, 2=Montag, ... 7=Samstag). Diese Indexwerte entsprechen dem ODBC-Standard.

mysql> wähle DAYOFWEEK('1998-02-03');
-> 3

WOCHENTAG(Datum)

Gibt den Wochentagindex des Datums zurück (0=Montag, 1=Dienstag, … 6=Sonntag).

mysql> wähle WOCHENTAG('1997-10-04 22:23:00');
-> 5
mysql> wähle WOCHENTAG('1997-11-05');
-> 2 

DAYOFMONTH(Datum)

Gibt den Tag des Monats im Datum im Bereich 1 bis 31 zurück.

mysql> wähle DAYOFMONTH('1998-02-03');
-> 3

DAYOFYEAR(Datum)

Gibt den Tag des Jahres für das Datum im Bereich 1 bis 366 zurück.

mysql> wähle DAYOFYEAR('1998-02-03');
-> 34

MONAT(Datum)

Gibt den Monat des Datums im Bereich von 1 bis 12 zurück.

mysql> wähle MONAT('1998-02-03');
-> 2

DAYNAME(Datum)

Gibt den Wochentag des Datums zurück.

mysql> wähle DAYNAME("1998-02-05");
-> 'Donnerstag'

MONATSNAME(Datum)

Gibt den Monatsnamen im Datum zurück.

mysql> wähle MONATSNAME("1998-02-05");
-> 'Februar'

QUARTAL(Datum)

Gibt das Quartal des Jahres für das Datum im Bereich 1 bis 4 zurück.

mysql> wähle QUARTAL('98-04-01');
-> 2

WOCHE(Datum)

WOCHE(Datum, Erstes)

Für Orte, an denen Sonntag der erste Tag der Woche ist, gibt es ein einzelnes Argument, das die Wochennummer des Datums im Bereich von 0 bis 52 zurückgibt. Mit der 2-Argument-Form WEEK() können Sie angeben, ob die Woche am Sonntag oder am Montag beginnt. Wenn das zweite Argument 0 ist, beginnt die Woche am Sonntag, wenn das zweite Argument 1 ist, beginnt die Woche am Montag.

mysql> wähle WOCHE('1998-02-20');
-> 7
mysql> wähle WOCHE('1998-02-20',0);
-> 7
mysql> wähle WOCHE('1998-02-20',1);
-> 8

JAHR(Datum)

Gibt das Jahr des Datums im Bereich 1000 bis 9999 zurück.

mysql> wähle JAHR('98-02-03');
-> 1998

STUNDE (Zeit)

Gibt die Stunde im Bereich 0 bis 23 zurück.

mysql> wähle STUNDE('10:05:03');
-> 10

MINUTE (Zeit)

Gibt die Minute der Zeit im Bereich von 0 bis 59 zurück.

mysql> wähle MINUTE('98-02-03 10:05:03');
-> 5

SEKUNDE (Zeit)

Gibt die Zeit in Sekunden im Bereich von 0 bis 59 zurück.

mysql> wähle ZWEITENS('10:05:03');
-> 3

PERIOD_ADD(P,N)

Fügen Sie dem Zeitraum P N Monate hinzu (im Format JJMM oder JJJJMM). Gibt einen Wert im Format JJJJMM zurück. Beachten Sie, dass der Phasenparameter P kein Datumswert ist.

mysql> wähle PERIOD_ADD(9801,2);
-> 199803

PERIOD_DIFF(P1,P2)

Gibt die Anzahl der Monate zwischen den Zeiträumen P1 und P2 zurück. P1 und P2 sollten im Format JJMM oder JJJJMM vorliegen. Beachten Sie, dass die Periodenparameter P1 und P2 keine Datumswerte sind.

mysql> wähle PERIOD_DIFF(9802,199703);
-> 11

DATE_ADD(Datum,INTERVAL-Ausdruckstyp)

DATE_SUB(Datum,INTERVAL-Ausdruckstyp)

ADDDATE(Datum,INTERVAL-Ausdruckstyp)

SUBDATE(Datum,INTERVAL-Ausdruckstyp)

Diese Funktionen führen Datumsarithmetik durch. Ab MySQL 3.22 sind sie neu. ADDDATE() und SUBDATE() sind Synonyme für DATE_ADD() und DATE_SUB().

In MySQL 3.23 können Sie + und - anstelle von DATE_ADD() und DATE_SUB() verwenden. (Siehe Beispiel.) date ist ein DATETIME- oder DATE-Wert, der das Startdatum angibt, expr ist ein Ausdruck, der den Intervallwert angibt, der zum Startdatum addiert oder davon subtrahiert werden soll, und expr ist eine Zeichenfolge; sie kann mit einem „-“ beginnen, um ein negatives Intervall anzuzeigen. Typ ist ein Schlüsselwort, das angibt, wie der Ausdruck interpretiert werden soll. Die Funktion EXTRACT(Typ FROM Datum) gibt das Intervall „Typ“ aus einem Datum zurück. Die folgende Tabelle zeigt, wie die Parameter Typ und Ausdruck verknüpft sind: Typ Wert Bedeutung Erwarteter Ausdruck Format

SEKUNDE Sekunden
MINUTE MinutenMINUTE
STUNDE ZEIT STUNDEN
TAG TAGE
MONAT MONATE
JAHR JAHRE
MINUTE_SECOND Minuten und Sekunden „MINUTES:SECONDS“
HOUR_MINUTE Stunden und Minuten „STUNDEN:MINUTEN“
DAY_HOUR Tage und Stunden "TAGE STUNDEN"
YEAR_MONTH Jahr und Monat „YEARS-MONTHS“
HOUR_SECOND Stunden, Minuten, „STUNDEN:MINUTEN:SEKUNDEN“
DAY_MINUTE Tage, Stunden, Minuten „TAGE STUNDEN:MINUTEN“
DAY_SECOND Tage, Stunden, Minuten, Sekunden „TAGE STUNDEN:MINUTEN:SEKUNDEN“

MySQL erlaubt beliebige Satzzeichentrennzeichen im Ausdrucksformat. Zeigt an, dass das vorgeschlagene Trennzeichen angezeigt wird. Wenn das Datumsargument ein DATE-Wert ist und Ihre Berechnung nur die Teile JAHR, MONAT und TAG enthält (also keinen Zeitanteil), ist das Ergebnis ein DATE-Wert. Andernfalls ist das Ergebnis ein DATETIME-Wert.

mysql> SELECT "1997-12-31 23:59:59" + INTERVALL 1 SEKUNDE;
-> 1. Januar 1998 00:00:00
mysql> INTERVALL 1 TAG AUSWÄHLEN + "1997-12-31";
-> 01.01.1998
mysql> SELECT "1998-01-01" - INTERVALL 1 SEKUNDE;
-> 31.12.1997 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVALL 1 SEKUNDE);
-> 1. Januar 1998 00:00:00
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVALL 1 TAG);
-> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVALL "1:1" MINUTE_SEKUNDE);
-> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
INTERVALL "1 1:1:1" TAG_SEKUNDE);
-> 30.12.1997 22:58:59
mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
INTERVALL "-1 10" TAG_STUNDE);
-> 30.12.1997 14:00:00
mysql> SELECT DATE_SUB("1998-01-02", INTERVALL 31 TAGE);
-> 02.12.1997
mysql> AUSWÄHLEN EXTRACT(JAHR AUS "1999-07-02");
-> 1999
mysql> SELECT EXTRACT(JAHR_MONAT AUS "1999-07-02 01:02:03");
-> 199907
mysql> SELECT EXTRACT(TAG_MINUTE AUS "1999-07-02 01:02:03");
-> 20102

Wenn Sie einen Intervallwert angeben, der zu kurz ist (der nicht den vom Schlüsselwort „Typ“ erwarteten Intervallteil enthält), geht MySQL davon aus, dass Sie den äußersten linken Teil des Intervallwerts ausgelassen haben. Zum Beispiel,

Wenn Sie den Typ DAY_SECOND angeben, wird erwartet, dass der Wert von expr die Komponenten Tag, Stunde, Minute und Sekunde enthält. Wenn Sie einen Wert wie "1:10" angeben,

MySQL geht davon aus, dass die Tages- und Stundenangaben fehlen und dass der Wert Minuten und Sekunden darstellt. Mit anderen Worten, "1:10" DAY_SECOND ist gleichbedeutend mit "1:10"

MINUTE_SECOND: Dies ist mehrdeutig hinsichtlich der Art und Weise, wie MySQL TIME-Werte als Darstellung der verstrichenen Zeit und nicht der Tageszeit interpretiert. Wenn Sie ein Datum verwenden, das wirklich falsch ist,

Das Ergebnis ist NULL. Wenn Sie MONTH, YEAR_MONTH oder YEAR erhöhen und das resultierende Datum größer als die maximale Anzahl von Tagen im neuen Monat ist, wird der Tag so angepasst, dass die maximale Anzahl von Tagen im neuen Monat genutzt wird.

mysql> select DATE_ADD('1998-01-30', Intervall 1 Monat);
-> 28.02.1998

Beachten Sie aus den vorherigen Beispielen, dass bei dem Wort INTERVAL und dem Schlüsselwort type die Groß-/Kleinschreibung nicht beachtet wird.

TO_DAYS(Datum)

Gibt bei einem angegebenen Datum eine Tageszahl zurück (die Anzahl der Tage seit dem Jahr 0).

mysql> wähle HEUTE_TAGE(950501);
-> 728779
mysql> wähle TO_DAYS('1997-10-07');
-> 729669

VON_TAGEN(N)

Gibt bei gegebener Tageszahl N einen DATE-Wert zurück.

mysql> wähle FROM_DAYS(729669);
-> '1997-10-07'

DATE_FORMAT(Datum,Format)

Formatiert einen Datumswert entsprechend der Formatzeichenfolge. Die folgenden Modifikatoren können in der Formatzeichenfolge verwendet werden: %M Monatsname (Januar...Dezember)

%W Wochentag (Sonntag...Samstag)
%D Tag des Monats mit englischem Präfix (1., 2., 3. usw.)
%Y Jahr, Zahl, 4 Ziffern
%y Jahr, Zahl, 2 Ziffern
%a Abgekürzter Wochentag (So....Sa.)
%d Tag im Monat, Zahl (00...31)
%e Tag im Monat, Zahl (0...31)
%m Monat, Zahl (01...12)
%c Monat, Zahl (1...12)
%b abgekürzter Monatsname (Jan....Dez.)
%j Tag im Jahr (001...366)
%H Stunde (00...23)
%k Stunde (0...23)
%h Stunde (01...12)
%I Stunde (01...12)
%l Stunden (1...12)
%i Minute, Zahl (00...59)
%r Zeit, 12 Stunden (hh:mm:ss [AP]M)
%T Zeit, 24 Stunden (hh:mm:ss)
%S Sekunden (00...59)
%s Sekunden (00...59)
%p AM oder PM
%w Wochentag (0=Sonntag...6=Samstag)
%U Woche (0...52), wobei Sonntag der erste Tag der Woche ist
%u Woche (0...52), wobei Montag der erste Tag der Woche ist
%% Ein wörtliches "%"

Alle anderen Zeichen werden ohne Interpretation in das Ergebnis übernommen.

mysql> wähle DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Samstag Oktober 1997'
mysql> wähle DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> wähle DATE_FORMAT('1997-10-04 22:23:00',
%D %y %a %d %m %b %j');
-> '4. 97 Sa 04 10 Okt 277'
mysql> wähle DATE_FORMAT('1997-10-04 22:23:00',
„%H %k %I %r %T %S %w“);
-> '22 22 10 22:23:00 22:23:00 00 6'

Ab MySQL 3.23 ist vor dem Formatmodifiziererzeichen ein „%“ erforderlich. In früheren Versionen von MySQL ist % optional.

TIME_FORMAT(Zeit,Format)

Dies wird wie die Funktion DATE_FORMAT() oben verwendet, aber die Formatzeichenfolge kann nur die Formatmodifikatoren enthalten, die Stunden, Minuten und Sekunden verarbeiten. Die anderen Modifikatoren erzeugen einen NULL-Wert oder 0.

CURDATE()

CURRENT_DATE gibt den heutigen Datumswert im Format „JJJJ-MM-TT“ oder „JJJJMMTT“ zurück, je nachdem, ob die Funktion in einem Zeichenfolgen- oder numerischen Kontext verwendet wird.

mysql> wähle CURDATE();
-> '15.12.1997'
mysql> wähle CURDATE() + 0;
-> 19971215

CURTIME()

AKTUELLE_ZEIT

Gibt den aktuellen Zeitwert im Format „HH:MM:SS“ oder HHMMSS zurück, je nachdem, ob die Funktion in einem Zeichenfolgen- oder numerischen Kontext verwendet wird.

mysql> wähle CURTIME();
-> '23:50:26'
mysql> wähle CURTIME() + 0;
-> 235026

JETZT()

SYSDATE()

CURRENT_TIMESTAMP Gibt das aktuelle Datum und die aktuelle Uhrzeit im Format „JJJJ-MM-TT HH:MM:SS“ oder „JJJJMMTDHHMMSS“ zurück, je nachdem, ob die Funktion in einem Zeichenfolgen- oder numerischen Kontext verwendet wird.

mysql> JETZT auswählen();
-> '1997-12-15 23:50:26'
mysql> wähle JETZT() + 0;
-> 19971215235026

UNIX_TIMESTAMP()
UNIX_TIMESTAMP(Datum)

Wenn es ohne Argumente aufgerufen wird, wird ein Unix-Zeitstempel (Sekunden seit 1. Januar 1970, 00:00:00 GMT) zurückgegeben. Wenn UNIX_TIMESTAMP() mit einem Datumsargument aufgerufen wird, gibt es die Anzahl der Sekunden seit „1970-01-01 00:00:00“ GMT zurück. Datum kann eine DATE-Zeichenfolge, eine DATETIME-Zeichenfolge, ein TIMESTAMP oder eine Zahl sein, die die Ortszeit im Format JJMMTT oder JJJJMMTT darstellt.

mysql> wähle UNIX_TIMESTAMP();
-> 882226357
mysql> wähle UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580

Wenn UNIX_TIMESTAMP mit einer TIMESTAMP-Spalte verwendet wird, akzeptiert die Funktion den Wert direkt, ohne implizite Konvertierung von „String in Unix-Zeitstempel“.

FROM_UNIXTIME(unix_zeitstempel)

Gibt den durch das Argument unix_timestamp dargestellten Wert im Format „JJJJ-MM-TT HH:MM:SS“ oder „JJJJMMTDHHMMSS“ zurück, je nachdem, ob die Funktion in einem Zeichenfolgen- oder numerischen Kontext verwendet wird.

mysql> wähle FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> wähle FROM_UNIXTIME(875996580) + 0;
-> 19971004222300

FROM_UNIXTIME(Unix_Zeitstempel,Format)

Gibt eine Zeichenfolge zurück, die den Unix-Zeitstempel darstellt, formatiert entsprechend der Formatzeichenfolge. Das Format kann dieselben Modifikatoren enthalten, die für die Funktion DATE_FORMAT() aufgelistet sind.

mysql> wähle FROM_UNIXTIME(UNIX_TIMESTAMP(),
%Y %D %M %h:%i:%s %x');
-> '1997 23. Dezember 03:43:30 x'

SEC_TO_TIME (Sekunden)

Gibt das Sekundenargument in Stunden, Minuten und Sekunden umgerechnet zurück. Der Wert wird als „HH:MM:SS“ oder HHMMSS formatiert, je nachdem, ob die Funktion in einem Zeichenfolgen- oder numerischen Kontext verwendet wird.

mysql> wähle SEC_TO_TIME(2378);
-> '00:39:38'
mysql> wähle SEC_TO_TIME(2378) + 0;
-> 3938

TIME_TO_SEC(Zeit)

Gibt den Zeitparameter, umgerechnet in Sekunden, zurück.

mysql> wähle TIME_TO_SEC('22:23:00');
-> 80580
mysql> wähle TIME_TO_SEC('00:39:38');
-> 2378

MySQL hat viele Datumsfunktionen. Die für den Datumsvergleich verwendete Funktion ist nicht unbedingt eine einzelne Funktion. Es kann eine Kombination mehrerer Funktionen sein. Sie müssen also Ihre Vorstellungskraft einsetzen.

Das könnte Sie auch interessieren:
  • MySQL-Zeitdifferenzfunktionen (TIMESTAMPDIFF, DATEDIFF), Funktionen zur Berechnung von Datumsumrechnungen (date_add, day, date_format, str_to_date)
  • Details der MySQL-Berechnungsfunktion

<<:  Verwendung und Unterschied von Js-Modulverpackungsexporten erfordern Import

>>:  So verwenden Sie Nginx zur Verwaltung einer domänenübergreifenden Vue-Entwicklungsumgebung

Artikel empfehlen

Detaillierte Erklärung der CocosCreator-Optimierung DrawCall

Inhaltsverzeichnis Vorwort Was ist DrawCall Welch...

Einführung in berechnete Eigenschaften in Vue

Inhaltsverzeichnis 1. Was ist eine berechnete Eig...

Lösung für vergessenes Linux MySQL-Root-Passwort

Wenn Sie sich bei der Verwendung der MySQL-Datenb...

Eine kurze Diskussion über Tags in HTML

0. Was ist ein Tag? XML/HTML-CodeInhalt in die Zw...

Detaillierte Erklärung des Fischschwarm-Algorithmus im CocosCreator-Spiel

Vorwort Ich wollte vor kurzem CocosCreator lernen...

Beispiel für die Implementierung einer kaskadierenden MySQL-Replikation

Bei der sogenannten kaskadierenden Replikation sy...

js zur Realisierung eines einfachen Werbefensters

In diesem Artikel wird der spezifische Code von j...