>  기사  >  데이터 베이스  >  MySQL 날짜 및 시간 필드를 쿼리하는 방법

MySQL 날짜 및 시간 필드를 쿼리하는 방법

WBOY
WBOY앞으로
2023-05-27 09:04:335455검색

1. 날짜 및 시간 유형 개요

MySQL에서 지원하는 날짜 및 시간 유형은 DATETIME, TIMESTAMP, DATE, TIME, YEAR,

여러 유형을 비교하면 다음과 같습니다.

MySQL 날짜 및 시간 필드를 쿼리하는 방법

날짜 포함 및 시간 필드 유형을 선택할 때 스토리지 요구 사항에 따라 적절한 유형을 선택하면 됩니다.

2. 날짜 및 시간 관련 함수

날짜 및 시간 필드를 처리하는 함수가 많이 있으며 그 중 일부는 쿼리에 자주 사용됩니다.

다음은 여러 관련 함수를 사용하는 방법을 소개합니다.

CURDATE와 CURRENT_DATE 두 함수는 동일한 효과를 가지며 현재 시스템의 날짜 값을 반환합니다.
  • 두 함수 CURTIME과 CURRENT_TIME은 동일한 효과를 가지며 현재 시스템 시간 값을 반환합니다.
  • NOW()와 SYSDATE()는 동일한 기능을 가지며 현재 시스템의 날짜 및 시간 값을 반환합니다.
  • UNIX_TIMESTAMP UNIX 타임스탬프 함수를 가져오고 UNIX 타임스탬프를 기반으로 부호 없는 정수를 반환합니다.
  • FROM_UNIXTIME은 UNIX 타임스탬프를 시간 형식으로 변환하며 UNIX_TIMESTAMP의 역함수입니다.
  • TO_DAYS()는 날짜 값을 추출하고 AD 0 이후의 일수를 반환합니다.
  • DAY() 지정된 날짜 또는 시간의 일 값을 가져옵니다.
  • DATE() 지정된 날짜 또는 시간의 날짜를 가져옵니다.
  • TIME() 지정된 날짜 또는 시간의 시간을 가져옵니다.
  • MONTH 지정된 날짜의 월을 가져옵니다.
  • WEEK 지정된 날짜에 대한 연도의 주 번호를 가져옵니다.
  • YEAR 연도를 가져옵니다.
  • QUARTER 날짜의 분기 값을 가져옵니다.
  • DATE_ADD 및 ADDDATE는 동일한 기능을 가진 두 함수이며 둘 다 지정된 시간 간격을 날짜에 추가합니다.
  • DATE_SUB 및 SUBDATE에는 동일한 기능이 있으며 둘 다 날짜에서 지정된 시간 간격을 뺍니다.
  • ADDTIME 시간 추가 작업은 원래 시간에 지정된 시간을 추가합니다.
  • SUBTIME 시간 빼기 연산, 원래 시간에서 지정된 시간을 뺍니다.
  • DATEDIFF 두 날짜 사이의 간격을 가져오고 매개변수 1에서 매개변수 2를 뺀 값을 반환합니다.
  • DATE_FORMAT은 지정된 날짜의 형식을 지정하고 매개변수에 따라 지정된 형식으로 값을 반환합니다.
  • 일부 사용 예:

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. 날짜 및 시간 필드에 대한 정식 쿼리

쿼리 요구 사항을 충족하도록 준비하세요. 프로젝트 요구 사항에는 일반적으로 날짜 또는 시간을 기반으로 하는 조건부 필터링 쿼리가 포함됩니다. 이러한 요구 사항은 다양하므로 날짜 및 시간 필드를 쿼리하고 필터링하는 방법을 살펴보겠습니다.

먼저 쿼리의 정확성을 높이기 위해서는 데이터 삽입 시에도 사양에 맞게 삽입해야 합니다. 연도가 4자리 숫자를 사용하고 일과 월이 합리적인 범위 내에 있는지 확인하기 위해 테이블을 만들고 테스트를 용이하게 하기 위해 일부 데이터를 삽입했습니다.

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' );

위 테스트 테이블의 데이터를 기반으로 몇 가지 일반적인 쿼리문을 작성하는 방법을 알아봅니다.

날짜 또는 시간에 해당하는 쿼리:

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';
날짜 또는 시간 범위에 따른 쿼리:

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;;
이번 달 데이터 조회:

# 查询create_time在本月的数据
select * from t_date where DATE_FORMAT(create_time, &#39;%Y-%m&#39; ) = DATE_FORMAT( CURDATE( ) , &#39;%Y-%m&#39; );
최근 며칠 데이터 조회:

# 以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);
기타 쿼리 작성 방법:

# 查询今天的数据
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;

위 내용은 MySQL 날짜 및 시간 필드를 쿼리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제