Heim  >  Artikel  >  Datenbank  >  So fragen Sie MySQL-Datums- und Uhrzeitfelder ab

So fragen Sie MySQL-Datums- und Uhrzeitfelder ab

WBOY
WBOYnach vorne
2023-05-27 09:04:335455Durchsuche

1. Übersicht über Datums- und Uhrzeittypen

Die von MySQL unterstützten Datums- und Uhrzeittypen sind DATETIME, TIMESTAMP, DATE, TIME, YEAR,

Der Vergleich mehrerer Typen ist wie folgt:

So fragen Sie MySQL-Datums- und Uhrzeitfelder ab

Einschließlich Datum und Zeitfeldtypen Wählen Sie bei der Auswahl einfach den passenden Typ entsprechend Ihren Speicheranforderungen aus.

2. Datums- und zeitbezogene Funktionen

Es gibt viele Funktionen zur Verarbeitung von Datums- und Zeitfeldern, von denen einige häufig in Abfragen verwendet werden.

Im Folgenden finden Sie eine Einführung in die Verwendung verschiedener verwandter Funktionen:

  • Die beiden Funktionen CURDATE und CURRENT_DATE haben die gleiche Wirkung und geben den Datumswert des aktuellen Systems zurück.

  • Die beiden Funktionen CURTIME und CURRENT_TIME haben die gleiche Wirkung und geben den Zeitwert des aktuellen Systems zurück.

  • NOW() und SYSDATE() haben die gleiche Funktion und geben den Datums- und Uhrzeitwert des aktuellen Systems zurück.

  • UNIX_TIMESTAMP Ruft die UNIX-Zeitstempelfunktion ab und gibt eine vorzeichenlose Ganzzahl basierend auf dem UNIX-Zeitstempel zurück.

  • FROM_UNIXTIME konvertiert den UNIX-Zeitstempel in das Zeitformat und ist die Umkehrfunktion von UNIX_TIMESTAMP.

  • TO_DAYS() extrahiert einen Datumswert und gibt die Anzahl der Tage seit 0 n. Chr. zurück.

  • DAY() Ruft den Tageswert am angegebenen Datum oder zur angegebenen Uhrzeit ab.

  • DATE() Ruft das Datum zum angegebenen Datum oder zur angegebenen Uhrzeit ab.

  • TIME() Ruft die Uhrzeit am angegebenen Datum oder zur angegebenen Uhrzeit ab.

  • MONTH Ruft den Monat im angegebenen Datum ab.

  • WEEK Ruft die Wochennummer des Jahres für das angegebene Datum ab.

  • JAHR Holen Sie sich das Jahr.

  • QUARTER Ruft den Viertelwert des Datums ab.

  • DATE_ADD und ADDDATE sind zwei Funktionen mit derselben Funktion, beide addieren das angegebene Zeitintervall zum Datum.

  • DATE_SUB und SUBDATE haben die gleiche Funktion, sie subtrahieren beide das angegebene Zeitintervall vom Datum.

  • ADDTIME Zeitadditionsoperation, addiert die angegebene Zeit zur ursprünglichen Zeit.

  • SUBTIME-Zeitsubtraktionsoperation: Subtrahieren Sie die angegebene Zeit von der ursprünglichen Zeit.

  • DATEDIFF Ruft das Intervall zwischen zwei Datumsangaben ab und gibt den Wert von Parameter 1 minus Parameter 2 zurück.

  • DATE_FORMAT formatiert das angegebene Datum und gibt den Wert im angegebenen Format gemäß den Parametern zurück.

Einige Anwendungsbeispiele:

mysql> select CURRENT_DATE,CURRENT_TIME,NOW();
+--------------+--------------+---------------------+
| CURRENT_DATE | CURRENT_TIME | NOW()               |
+--------------+--------------+---------------------+
| 2020-06-03   | 15:09:37     | 2020-06-03 15:09:37 |
+--------------+--------------+---------------------+

mysql> select TO_DAYS('2020-06-03 15:09:37'),
TO_DAYS('2020-06-03')-TO_DAYS('2020-06-01');
+--------------------------------+---------------------------------------------+
| TO_DAYS('2020-06-03 15:09:37') | TO_DAYS('2020-06-03')-TO_DAYS('2020-06-01') |
+--------------------------------+---------------------------------------------+
|                         737944 |                                           2 |
+--------------------------------+---------------------------------------------+

mysql> select MONTH('2020-06-03'),WEEK('2020-06-03'),YEAR('2020-06-03');
+---------------------+--------------------+--------------------+
| MONTH('2020-06-03') | WEEK('2020-06-03') | YEAR('2020-06-03') |
+---------------------+--------------------+--------------------+
|                   6 |                 22 |               2020 |
+---------------------+--------------------+--------------------+

# DATEDIFF(date1,date2) 返回起始时间 date1 和结束时间 date2 之间的天数
mysql> SELECT DATEDIFF('2017-11-30','2017-11-29') AS COL1,
    -> DATEDIFF('2017-11-30','2017-12-15') AS col2;
+------+------+
| COL1 | col2 |
+------+------+
|    1 |  -15 |
+------+------+

3. Kanonische Abfrage für Datums- und Zeitfelder

Seien Sie darauf vorbereitet, unsere Abfrageanforderungen zu erfüllen. Projektanforderungen umfassen normalerweise bedingte Filterabfragen basierend auf Datum oder Uhrzeit. Lassen Sie uns untersuchen, wie Datums- und Uhrzeitfelder abgefragt und gefiltert werden, da diese Anforderungen vielfältig sind.

Um die Abfrage genauer zu machen, müssen beim Einfügen von Daten diese zunächst auch gemäß den Spezifikationen eingefügt werden. Um sicherzustellen, dass das Jahr vierstellig ist und Datum und Monat in einem angemessenen Bereich liegen, haben wir eine Tabelle erstellt und einige Daten eingefügt, um das Testen zu erleichtern.

CREATE TABLE `t_date` (
`increment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`year_col` YEAR NOT NULL  COMMENT '年',
`date_col` date NOT NULL  COMMENT '日期',
`time_col` time NOT NULL  COMMENT '时间',
`dt_col` datetime NOT NULL  COMMENT 'datetime时间',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`increment_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='time测试表';
# 日期和时间都选取当前的日期或时间
INSERT INTO t_date (year_col,date_col,time_col,dt_col,create_time) VALUES 
(year(now()),DATE(NOW()),time(now()),NOW(),NOW());
# 指定日期或时间插入
INSERT INTO t_date ( `year_col`, `date_col`, `time_col`, `dt_col`, `create_time` )
VALUES
    ( 2020, '2020-06-03', '09:00:00', '2020-06-03 10:04:04', '2020-06-03 10:04:04' ),
    ( 2020, '2020-05-10', '18:00:00', '2020-05-10 16:00:00', '2020-05-10 16:00:00' ),
    ( 2019, '2019-10-03', '16:04:04', '2019-10-03 16:00:00', '2019-10-03 16:00:00' ),
    ( 2018, '2018-06-03', '16:04:04', '2018-06-03 16:00:00', '2018-06-03 16:00:00' ),
    ( 2000, '2000-06-03', '16:04:04', '2000-06-03 08:00:00', '2000-06-03 08:00:00' ),
    ( 2008, '2008-06-03', '16:04:04', '2008-06-03 08:00:00', '2008-06-03 08:00:00' ),
    ( 1980, '1980-06-03', '16:04:04', '1980-06-03 08:00:00', '1980-06-03 08:00:00' );

Basierend auf den Daten in der Testtabelle oben lernen wir, wie man mehrere gängige Abfrageanweisungen schreibt:

Abfrage basierend auf Datums- oder Zeitäquivalent:

select * from t_date where year_col = 2020;
select * from t_date where date_col = '2020-06-03';
select * from t_date where dt_col = '2020-06-03 16:04:04';

Abfrage basierend auf Datums- oder Zeitbereich:

select * from t_date where date_col > '2018-01-01';
select * from t_date where dt_col >= &#39;2020-05-01 00:00:00&#39; and dt_col < &#39;2020-05-31 23:59:59&#39;;
select * from t_date where dt_col between &#39;2020-05-01 00:00:00&#39; and  &#39;2020-05-31 23:59:59&#39;;

Fragen Sie die Daten dieses Monats ab:

# 查询create_time在本月的数据
select * from t_date where DATE_FORMAT(create_time, &#39;%Y-%m&#39; ) = DATE_FORMAT( CURDATE( ) , &#39;%Y-%m&#39; );

Fragen Sie die Daten der letzten Tage ab:

# 以date_col为条件 查询最近7天或30天的数据
SELECT * FROM t_date where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(date_col);
SELECT * FROM t_date where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(date_col);

Andere Methoden zum Schreiben von Abfragen:

# 查询今天的数据
SELECT * FROM t_date WHERE TO_DAYS(create_time) = TO_DAYS(NOW());
# 查询某个月的数据
SELECT * FROM t_date WHERE DATE_FORMAT(create_time, &#39;%Y-%m&#39;)=&#39;2020-06&#39;;
# 查询某年的数据
SELECT * FROM t_date WHERE DATE_FORMAT(create_time, &#39;%Y&#39;)= 2020;
SELECT * FROM t_date WHERE YEAR(create_time) = 2020;
# 根据日期区间查询数据,并排序
SELECT * FROM t_date WHERE DATE_FORMAT(create_time, &#39;%Y&#39;) BETWEEN &#39;2018&#39; AND &#39;2020&#39; ORDER BY create_time DESC;

Das obige ist der detaillierte Inhalt vonSo fragen Sie MySQL-Datums- und Uhrzeitfelder ab. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen