VorwortVor kurzem habe ich an einem Projekt gearbeitet, das komplexe Datumsabfragen in MySQL beinhaltete. Datumsabfragen sind bei Datenbankabfragen eigentlich recht häufig, z. B. das Abfragen der Intervallinformationen vom Startdatum bis zum Enddatum, das Abfragen von Informationen, bei denen das Datum vor dem gültigen Datum liegt, das Abfragen des heutigen Datums, des morgigen Datums und das Anstellen von Vergleichen usw. Anwendungsszenarios für Abfragen ZeitintervallabfrageAbfrage, Daten vom 1. Juni 2021 bis 25. August 2021 WÄHLEN * AUS `DatumTest` wobei DATE_FORMAT(Datum,'%Y%m%d') ZWISCHEN '20210601' und '20210825' Inklusive Startzeit, exklusive Endzeit Die Schreibmethode von DATE_FORMAT(date,'%Y%m') kann jedoch keine Indizes verwenden und die Abfrage ist bei großen Datenmengen extrem langsam. Abfragedatum heute ZeitvergleichsdatenWählen Sie * von t_user t, wobei t.CREATE_TIME>=curdate() Konvertieren Sie Datum und Uhrzeit über DATE in das Uhrzeitformat Wählen Sie * von t_user t, wobei DATE (t.CREATE_TIME)>=DATE (jetzt()) Allgemeine Abfragen zur Zykluszeit-- Wählen Sie heute den vollständigen Namen und die hinzugefügte Zeit von t_user aus, wobei to_days(addedTime) <= to_days(now()); -- gestern, wähle vollständigen Namen, hinzugefügte Zeit von t_user, wobei heute_Tage(JETZT()) - HEUTE_TAGE(hinzugefügte Zeit) <= 1; -- Wählen Sie in den letzten 7 Tagen fullName,addedTime von t_user aus, wobei date_sub(CURDATE(),INTERVAL 7 DAY) <= DATE(addedTime); -- In den letzten 30 Tagen SELECT fullName,addedTime FROM t_user where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(addedTime); -- Diesen Monat SELECT fullName,addedTime FROM t_user WHERE DATE_FORMAT( addedTime, '%Y%m' ) = DATE_FORMAT( CURDATE() , '%Y%m' ); - Letzter Monat SELECT fullName,addedTime FROM t_user WHERE PERIOD_DIFF( date_format( now() , '%Y%m' ) , date_format( addedTime, '%Y%m' ) ) =1; -- Fragen Sie die Daten dieses Quartals ab. Wählen Sie „fullName,addedTime FROM t_user“, wobei „QUARTER(addedTime)=QUARTER(now());“ -- Fragen Sie die Daten des vorherigen Quartals ab. Wählen Sie „fullName,addedTime FROM t_user“, wobei „QUARTER(addedTime)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));“ -- Fragen Sie die Daten dieses Jahres ab, wählen Sie fullName,addedTime FROM t_user, wobei YEAR(addedTime)=YEAR(NOW()); -- Daten des letzten Jahres abfragen select fullName,addedTime FROM t_user where year(addedTime)=year(date_sub(now(),interval 1 year)); -- Daten für die nächsten 6 Monate abfragen: select fullName,addedTime FROM t_user, wobei addedTime zwischen date_sub(now(),interval 6 months) und now(); liegt. -- Daten der aktuellen Woche abfragen SELECT fullName, addedTime FROM t_user WHERE YEARWEEK(date_format(addedTime,'%Y-%m-%d')) = YEARWEEK(now()); -- Daten der letzten Woche abfragen SELECT fullName, addedTime FROM t_user WHERE YEARWEEK(date_format(addedTime,'%Y-%m-%d')) = YEARWEEK(now())-1; -- Fragen Sie die Daten des letzten Monats ab. Wählen Sie „fullName,addedTime FROM t_user“, wobei „date_format(addedTime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m');“ -- Fragen Sie die Daten des aktuellen Monats ab. Wählen Sie „fullName, addedTime“ aus „t_user“, wobei „DATE_FORMAT(addedTime,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m');“ Wählen Sie vollständigen Namen, hinzugefügte Zeit aus t_user, wobei Datumsformat (hinzugefügte Zeit, '%Y-%m') = Datumsformat (jetzt(), '%Y-%m'); -- Fragen Sie die Daten des angegebenen Zeitraums ab. Wählen Sie „fullName,addedTime FROM t_user“, wobei „addedTime“ zwischen „2017-1-1 00:00:00“ und „2018-1-1 00:00:00“ liegt. Wählen Sie fullName, addedTime FROM t_user, wobei addedTime >='2017-1-1 00:00:00' und addedTime < '2018-1-1 00:00:00'; MySQL-Datums-/Uhrzeitfunktion 1 Holen Sie sich das aktuelle Datum + die aktuelle Uhrzeit (Datum + Uhrzeit) Funktion: now()jetzt auswählen(); +---------------------+ | jetzt() | +---------------------+ | 31.08.2021 16:16:32 | +---------------------+ 2 Aktuelles Datum + Uhrzeit abrufen (Datum + Uhrzeit) Funktion: sysdate()Die Datums- und Uhrzeitfunktion sysdate() ähnelt now(), mit dem Unterschied, dass now() seinen Wert zu Beginn der Ausführung erhält, während sysdate() seinen Wert dynamisch erhält, wenn die Funktion ausgeführt wird. Schauen Sie sich zum Verständnis das folgende Beispiel an: wähle jetzt(), sleep(3), jetzt(); +---------------------+----------+---------------------+ | jetzt() | schlaf(3) | jetzt() | +---------------------+----------+---------------------+ | 31.08.2021 16:20:12 | 0 | 31.08.2021 16:20:12 | +---------------------+----------+---------------------+ Wir können sehen, dass sich die Zeit davor und danach nicht geändert hat, der Wert also vor Beginn der Ausführung abgerufen wurde. sysdate() Datums- und Zeitfunktion, wird im Allgemeinen selten verwendet. 3 Holen Sie sich die aktuelle Zeitstempelfunktion: current_timestamp, current_timestamp()wähle aktuellen_Zeitstempel, aktuellen_Zeitstempel(); +---------------------+---------------------+ | aktueller_Zeitstempel | aktueller_Zeitstempel() | +---------------------+---------------------+ | 31.08.2021 16:27:26 | 31.08.2021 16:27:26 | +---------------------+---------------------+ 4 Holen Sie sich das aktuelle Datum (Datum) Funktion: curdate()-- 31.08.2021 wähle curdate(); MySQL-Datums-/Uhrzeit-Konvertierungsfunktion 1 Datum-Uhrzeit-KonvertierungszeichenfolgenformatDatum/Uhrzeit in Zeichenfolge (Datum/Uhrzeit in Zeichenfolge umgewandelt) Funktion: date_format(Datum,Format), time_format(Uhrzeit,Format) Wählen Sie Datumsformat ('2021-08-31 22:23:01', '%Y%m%d%H%i%s'); +----------------------------------------------------+ | Datumsformat('2021-08-31 22:23:01', '%Y%m%d%H%i%s') | +----------------------------------------------------+ | 20210831222301 | +----------------------------------------------------+ MySQL-Datums- und Zeitkonvertierungsfunktionen: date_format(date,format), time_format(time,format) können ein Datum/eine Uhrzeit in verschiedene Zeichenfolgenformate konvertieren. Es handelt sich um eine inverse Transformation der Funktion str_to_date(str,format). 2 String in Datum/Uhrzeit umwandelnMySQL Str to Date (Zeichenfolge zu Datum) Funktion: str_to_date(str, Format) Wählen Sie str_to_date('08/31/2021', '%m/%d/%Y'); -- 2021-08-31 Wählen Sie str_to_date('08/31/2021' , '%m/%d/%y'); -- 2021-08-31 Wählen Sie str_to_date('08.31.2021', '%m.%d.%Y'); -- 2021-08-31 Wählen Sie str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30 Wählen Sie str_to_date('08.09.2021 08:31:30', '%m.%d.%Y %h:%i:%s'); -- 2021-08-31 08:09:30 Wie Sie sehen, kann die Konvertierungsfunktion str_to_date(str,format) einige unordentliche Zeichenfolgen in das Datumsformat konvertieren. Alternativ kann es in Zeit umgewandelt werden. Informationen zum „Format“ finden Sie im MySQL-Handbuch. 3 (Datum, Tag) KonvertierungsfunktionMySQL (Datum, Tag) Konvertierungsfunktionen: to_days(Datum), from_days(Tage) wähle heute('0000-00-00'); -- 0 wählen Sie to_days('2021-08-31'); -- 738398 4 (Zeit, Sekunden) KonvertierungsfunktionMySQL (Zeit, Sekunden) Konvertierungsfunktionen: time_to_sec(Zeit), sec_to_time(Sekunden) wähle Zeit bis zu Sek.('01:00:05'); -- 3605 wähle Sek._bis_Zeit(3605); -- '01:00:05' 5. Datums- und Zeitfunktionen zusammenfügenMySQL makedate(Jahr,TagdesJahres), maketime(Stunde,Minute,Sekunde) wähle makedate(2021,31); -- '2021-01-31' wähle makedate(2021,32); --'2021-02-01' wähle maketime(12,15,30); -- '12:15:30' makedate(2021,31) Das Jahr steht vorne und der Tag dahinter. Standardmäßig beginnt es im Januar. Wenn die Anzahl der Tage dahinter eine bestimmte Zahl ist, wird es in einen neuen Monat verschoben. 6 Unix-Zeitstempel, Datumskonvertierungsfunktionen
wähle unix_timestamp(); -- 1218290027 Wählen Sie unix_timestamp('2008-08-08'); -- 1218124800 Wählen Sie unix_timestamp('2008-08-08 12:30:00'); -- 1218169800 Wählen Sie from_unixtime(1218290027); --'2008-08-09 21:53:47' Wählen Sie from_unixtime(1218124800); --'2008-08-08 00:00:00' Wählen Sie from_unixtime(1218169800); --'2008-08-08 12:30:00' Wählen Sie from_unixtime (1218169800, '%Y %D %M %h:%i:%s %x'); – '8. August 2008, 12:30:00 2008' MySQL-Datums- und Uhrzeitberechnungsfunktion 1 Füge dem Datum ein Zeitintervall hinzu: date_add()setze @dt = now(); – Variablen definieren select date_add(@dt, Intervall 1 Tag); – füge 1 Tag hinzu select date_add(@dt, Intervall 1 Stunde); -- 1 Stunde hinzufügen Wählen Sie date_add(@dt, Intervall 1 Minute); -- ... Wählen Sie date_add(@dt, Intervall 1 Sekunde); Wählen Sie date_add(@dt, Intervall 1 Mikrosekunde); Wählen Sie date_add(@dt, Intervall 1 Woche); Wählen Sie date_add(@dt, Intervall 1 Monat); Wählen Sie date_add(@dt, Intervall 1 Quartal); Wählen Sie date_add(@dt, Intervall 1 Jahr); select date_add(@dt, interval -1 day); -- sub 1 Tag plus -1 Tag bedeutet minus 1 Tag Die MySQL-Funktionen adddate() und addtime() können durch date_add() ersetzt werden. Das Folgende ist ein Beispiel für die Implementierung der Funktion addtime() durch date_add(): setze @dt = '2021-08-31 12:12:33'; select date_add(@dt, Intervall '01:15:30' Stunde_Sekunde); -- 2021-08-31 13:28:03 wähle date_add(@dt, Intervall '1 01:15:30' Tag_Sekunde); -- 2021-09-01 13:28:03 2 Subtrahieren Sie ein Zeitintervall von einem Datum: date_sub()-- 29.08.2021 22:58:59 Wählen Sie date_sub('2021-08-31 00:00:00', Intervall '1 1:1:1' Tag_Sekunde); Die Datums- und Uhrzeitfunktion date_sub() hat dieselbe Verwendung wie date_add(), deshalb werde ich hier nicht ins Detail gehen. 3 Datums- und Zeitsubtraktionsfunktionen: datediff(date1,date2), timediff(time1,time2)-- Subtrahieren Sie date1 – date2 von zwei Daten und geben Sie die Anzahl der Tage zurück. Wählen Sie datediff('2021-08-31', '2021-08-30'); -- 1 Wählen Sie datediff('2021-08-31', '2021-08-20'); -- -11 -- Subtrahieren Sie Zeit1 – Zeit2 von zwei Daten und geben Sie die Zeitdifferenz zurück. Wählen Sie Zeitdifferenz ('2021-08-31 08:08:08', '2021-08-30 00:00:00'); -- 32:08:08 wähle Zeitdifferenz('08:08:08', '00:00:00'); -- -08:08:08
4 Funktionen zur Zeitstempelkonvertierung, Erhöhung und Verringerung:
Wählen Sie Zeitstempel ('2021-08-31'); -- 2021-08-31 00:00:00 Wählen Sie Zeitstempel ('2021-08-31 08:00:00', '01:01:01'); -- 2021-08-31 09:01:01 Zeitstempel auswählen('2021-08-31 08:00:00', '10 01:01:01'); -- 2021-09-10 09:01:01 wähle timestampadd(Tag, 1, '2021-08-31 08:00:00'); -- 2021-09-01 08:00:00 Wählen Sie date_add('2021-08-31 08:00:00', Intervall 1 Tag); -- 2021-09-01 08:00:00 – Die MySQL-Funktion timestampadd() ist date_add() ähnlich. wähle Zeitstempeldifferenz (Jahr, '2021-08-31', '2001-01-01'); -- -20 wähle Zeitstempeldifferenz(Tag,'2021-08-31','2001-01-01'); -- --7547 wähle Zeitstempeldifferenz (Stunde, '2021-08-31 12:00:00', '2021-08-31 00:00:00'); -- -12 Wählen Sie datediff('2021-08-31 12:00:00', '2021-08-31 00:00:00'); -- 0 Die MySQL-Funktion timestampdiff() ist viel leistungsfähiger als datediff(), die nur die Anzahl der Tage zwischen zwei Daten berechnen kann. Zeitzonen-Konvertierungsfunktionen Funktion „convert_tz(dt,from_tz,to_tz)“-- 31.08.2021 04:00:00 Wählen Sie convert_tz('2021-08-31 12:00:00', '+08:00', '+00:00'); Die Zeitzonenkonvertierung kann auch über date_add, date_sub und timestampadd erfolgen.Wählen Sie date_add('2021-08-31 12:00:00', Intervall -8 Stunde); -- 2021-08-31 04:00:00 select date_sub('2021-08-31 12:00:00', Intervall 8 Stunden); -- 2021-08-31 04:00:00 wähle timestampadd(Stunde, -8, '2021-08-31 12:00:00'); -- 2021-08-31 04:00:00 Dies ist das Ende dieses Artikels über MySQL-Datumsformatierung und komplexe Datumsbereichsabfragen. Weitere Informationen zur MySQL-Datumsformatierung und Datumsbereichsabfrage finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Neue Funktionen von JS ES: Einführung in Erweiterungsoperatoren
>>: Verwendung von „align-content“ im Zeilenumbruchbereich des Flex-Layouts
1. Docker installieren 1. Ich habe Centos7 in der...
1. Installieren Sie zuerst die Pagode Installatio...
In einem aktuellen Projekt musste ich die Funktio...
Bei täglichen Betriebs- und Wartungsarbeiten ist ...
Die Swap-Partition des Linux-Systems, also die Sw...
Inhaltsverzeichnis 1. Passen Sie den Inhalt der S...
XMeter API bietet einen umfassenden Online-Schnit...
Inhaltsverzeichnis Einführung Plätzchen Was sind ...
Inhaltsverzeichnis Vorwort Problembeschreibung Ur...
Vorbemerkungen 1.Unterschiede zwischen Vue2.x und...
CSS: 1. <link type="text/css" href=&q...
In diesem Artikelbeispiel wird der spezifische Co...
Hintergrund Im Unternehmen wurde ein neuer Server...
Meta-Tag-Funktion Der META-Tag ist ein Schlüsselt...
1. Testumgebung Name Version centos 7.6 Docker 18...