MySQL日期及时间字段怎么查询

WBOY
发布: 2023-05-27 09:04:33
转载
6547人浏览过

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() 提取日期值并返回自公元0年到现在的天数。

  • DAY() 获取指定日期或时间中的天值。

  • DATE() 获取指定日期或时间中的日期。

  • TIME() 获取指定日期或时间中的时间。

  • MONTH 获取指定日期中的月份。

  • WEEK 获取指定日期是一年中的第几周。

  • YEAR 获取年份。

  • QUARTER 获取日期所在的季度值。

  • DATE_ADD 和 ADDDATE 两个函数功能相同,都是向日期添加指定的时间间隔。

  • DATE_SUB 和 SUBDATE 两个函数功能相同,都是向日期减去指定的时间间隔。

  • ADDTIME 时间加法运算,在原始时间上添加指定的时间。

  • SUBTIME 时间减法运算,在原始时间上减去指定的时间。

  • DATEDIFF 获取两个日期之间间隔,返回参数 1 减去参数 2 的值。

  • DATE_FORMAT 格式化指定的日期,根据参数返回指定格式的值。

一些使用示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

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位数字且日期和月份在合理范围内,我们创建了一个表并插入了部分数据以方便测试。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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

登录后复制

根据上面测试表的数据,我们来学习下几种常见查询语句的写法:

根据日期或时间等值查询:

1

2

3

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

登录后复制

根据日期或时间范围查询:

1

2

3

select * from t_date where date_col > '2018-01-01';

select * from t_date where dt_col >= '2020-05-01 00:00:00' and dt_col < '2020-05-31 23:59:59';

select * from t_date where dt_col between '2020-05-01 00:00:00' and  '2020-05-31 23:59:59';

登录后复制

查询本月的数据:

1

2

# 查询create_time在本月的数据

select * from t_date where DATE_FORMAT(create_time, '%Y-%m' ) = DATE_FORMAT( CURDATE( ) , '%Y-%m' );

登录后复制

查询最近多少天的数据:

1

2

3

# 以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);

登录后复制

其他各类查询写法:

1

2

3

4

5

6

7

8

9

# 查询今天的数据

SELECT * FROM t_date WHERE TO_DAYS(create_time) = TO_DAYS(NOW());

# 查询某个月的数据

SELECT * FROM t_date WHERE DATE_FORMAT(create_time, '%Y-%m')='2020-06';

# 查询某年的数据

SELECT * FROM t_date WHERE DATE_FORMAT(create_time, '%Y')= 2020;

SELECT * FROM t_date WHERE YEAR(create_time) = 2020;

# 根据日期区间查询数据,并排序

SELECT * FROM t_date WHERE DATE_FORMAT(create_time, '%Y') BETWEEN '2018' AND '2020' ORDER BY create_time DESC;

登录后复制

以上就是MySQL日期及时间字段怎么查询的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:亿速云网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号