如何从MySQL的时间戳中选择日期?
在MySQL中,时间戳是以秒为单位的整数,从1970年1月1日起的秒数。在某些情况下,我们需要从时间戳中选择日期,本文将介绍如何使用MySQL中的函数来解决这个问题。
阅读更多:MySQL 教程
选择日期的方式
我们可以使用下列函数来选择日期:
- DATE_FORMAT()函数:将时间戳格式化为指定的日期时间格式。
- FROM_UNIXTIME()函数:将时间戳转换为日期时间格式,支持国际化。
- DATE()函数:提取日期部分,去掉时间部分。
- YEAR()函数、MONTH()函数、DAY()函数:提取年、月、日的值。
-- 示例表
CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_time` int(11) NOT NULL COMMENT '订单时间(时间戳)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插入记录
INSERT INTO `orders` (`order_time`) VALUES (1624109406), (1624109445), (1624109579), (1624110283);
DATE_FORMAT()函数
DATE_FORMAT()
函数通过指定日期格式,将时间戳转换为日期字符串。常见的格式有%Y-%m-%d %H:%i:%s
和%Y%m%d
两种。例如:
-- 格式:2021-06-19 11:16:46
SELECT DATE_FORMAT(FROM_UNIXTIME(order_time), '%Y-%m-%d %H:%i:%s') AS order_date FROM orders;
-- 年月日格式:20210619
SELECT DATE_FORMAT(FROM_UNIXTIME(order_time), '%Y%m%d') AS order_date FROM orders;
这里使用了FROM_UNIXTIME()
函数,将时间戳转换为日期时间格式。
如果要筛选某个日期之间的记录,可以使用BETWEEN
关键字:
SELECT * FROM orders WHERE FROM_UNIXTIME(order_time) BETWEEN '2021-06-19 00:00:00' AND '2021-06-19 23:59:59';
SELECT * FROM orders WHERE DATE_FORMAT(FROM_UNIXTIME(order_time), '%Y%m%d') = '20210619';
FROM_UNIXTIME()函数
FROM_UNIXTIME()
函数可以将时间戳格式化为指定的日期时间格式,同时支持国际化:
-- 标准格式:2021-06-19 11:16:46
SELECT FROM_UNIXTIME(order_time) AS order_date FROM orders;
-- 中文格式:2021年06月19日 11:16:46
SELECT DATE_FORMAT(FROM_UNIXTIME(order_time, '%Y年%m月%d日 %H:%i:%s')) AS order_date FROM orders;
DATE()函数
DATE()
函数可以提取日期部分,去掉时间部分:
-- 取日期部分:2021-06-19
SELECT DATE(FROM_UNIXTIME(order_time)) AS order_date FROM orders;
YEAR()函数、MONTH()函数、DAY()函数
YEAR()
函数、MONTH()
函数、DAY()
函数可以提取年、月、日的值:
-- 取年份:2021
SELECT YEAR(FROM_UNIXTIME(order_time)) AS order_year FROM orders;
-- 取月份:6
SELECT MONTH(FROM_UNIXTIME(order_time)) AS order_month FROM orders;
-- 取日期:19
SELECT DAY(FROM_UNIXTIME(order_time)) AS order_day FROM orders;
结论
以上就是从MySQL时间戳中选择日期的方法。我们可以使用DATE_FORMAT()
、FROM_UNIXTIME()
、DATE()
、YEAR()
、MONTH()
、DAY()
函数来实现。其中,DATE_FORMAT()
函数可以将时间戳转换为指定的日期时间格式,FROM_UNIXTIME()
函数支持国际化。使用这些函数,我们可以方便地进行日期筛选操作。