Mysql-Datumsformatierung und komplexe Datumsbereichsabfrage

Mysql-Datumsformatierung und komplexe Datumsbereichsabfrage

Vorwort

Vor 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

Zeitintervallabfrage

Abfrage, 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 Zeitvergleichsdaten

Wä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-Konvertierungszeichenfolgenformat

Datum/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 umwandeln

MySQL 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) Konvertierungsfunktion

MySQL (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) Konvertierungsfunktion

MySQL (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ügen

MySQL 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

unix_timestamp(),

unix_timestamp(Datum),

from_unixtime(unix_zeitstempel),

from_unixtime(Unix_Zeitstempel,Format)

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

Die beiden Parameter der Funktion timediff(time1, time2) müssen vom gleichen Typ sein.

4 Funktionen zur Zeitstempelkonvertierung, Erhöhung und Verringerung:

Zeitstempel (Datum) – Datum in Zeitstempel umwandeln

Zeitstempel(dt,Zeit) -- dt + Zeit

timestampadd(Einheit,Intervall,Datum/Uhrzeit_Ausdruck) --

Zeitstempeldiff(Einheit, Datums-/Uhrzeitausdruck1, Datums-/Uhrzeitausdruck2) --

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:
  • Detaillierte Erläuterung des einzeiligen Funktionscodes des Datumstyps in MySQL
  • MySQL-Methode zum Generieren von Zufallszahlen, Zeichenfolgen, Daten, Bestätigungscodes und UUIDs
  • Die Tücken der automatischen Inkrementierung numerischer MySQL-Typen
  • Analyse des MySQL-Problems beim Sortieren von Zahlen in Zeichenfolgen
  • MySQL-Beispiel zur Erläuterung von Einzelzeilenfunktionen und Zeichenmathematik, Datumsprozesssteuerung

<<:  Neue Funktionen von JS ES: Einführung in Erweiterungsoperatoren

>>:  Verwendung von „align-content“ im Zeilenumbruchbereich des Flex-Layouts

Artikel empfehlen

So installieren Sie die IonCube-Erweiterung mit Pagoda

1. Installieren Sie zuerst die Pagode Installatio...

Implementierung der Breakpoint-Wiederaufnahme im Vue-Video-Player

In einem aktuellen Projekt musste ich die Funktio...

So richten Sie die Swap-Partition SWAP in Linux 7.7 ein

Die Swap-Partition des Linux-Systems, also die Sw...

Analyse der Nutzung des Xmeter API-Schnittstellentesttools

XMeter API bietet einen umfassenden Online-Schnit...

Detaillierte Erklärung des JS-Browserspeichers

Inhaltsverzeichnis Einführung Plätzchen Was sind ...

Ursachen und Lösungen für MySQL-Datenverlust

Inhaltsverzeichnis Vorwort Problembeschreibung Ur...

Zusätzliche Anweisungen zur Verwendung von Gettern und Aktionen in Vuex

Vorbemerkungen 1.Unterschiede zwischen Vue2.x und...

Referenzschreiben im JS- und CSS-Stil

CSS: 1. <link type="text/css" href=&q...

Tab-Effekte mit JS schreiben

In diesem Artikelbeispiel wird der spezifische Co...

So mounten Sie eine neue Festplatte auf einem Linux-Cloud-Server

Hintergrund Im Unternehmen wurde ein neuer Server...

Zusammenfassung zur Verwendung von HTML-Meta-Tags (empfohlen)

Meta-Tag-Funktion Der META-Tag ist ein Schlüsselt...

Online- und Offlineinstallation von Docker und allgemeine Befehlsvorgänge

1. Testumgebung Name Version centos 7.6 Docker 18...