1. INT 类型时间戳查询
FROM_UNIXTIME()
函数可以将 MySQL
中以 INT类型
存储的时间(自1970年1月1日0时0分0秒到指定时间所经过的秒数)用一种指定的格式来显示,如未指定格式则默认以年月日时分秒
的形式返回。FROM_UNIXTIME(unix_timestamp,format)
表示返回 Unix
时间标记的一个时间字符串,这个字符串根据 format
格式化而来,一个使用示例如下
// 将 INT 类型创建时间格式化为精确到 分钟 的形式,从而完成统计数据行每分钟插入到表中的数量
select from_unixtime(FuiCreateTime,'%Y-%m-%d %H:%i') as createTime, count(*) as total from route.request group by createTime order by createTime desc limit 20;
下列修饰符可以被用在format
时间格式中:
符号 | 含义 |
---|---|
%Y | 年, 数字, 4 位 |
%y | 年, 数字, 2 位 |
%M | 月名字(January……December) |
%b | 缩写的月份名字(Jan……Dec) |
%m | 月, 数字(01……12) |
%c | 月, 数字(1……12) |
%D | 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。) |
%d | 月份中的天数, 数字(00……31) |
%e | 月份中的天数, 数字(0……31) |
%j | 一年中的天数(001……366) |
%W | 星期名字(Sunday……Saturday) |
%a | 缩写的星期名字(Sun……Sat) |
%w | 一个星期中的天数(0=Sunday ……6=Saturday ) |
%H | 小时(00……23) |
%k | 小时(0……23) |
%h | 小时(01……12) |
%I | 小时(01……12) |
%l | 小时(1……12) |
%r | 时间,12 小时(hh:mm:ss [AP]M) |
%T | 时间,24 小时(hh:mm:ss) |
%i | 分钟, 数字(00……59) |
%S | 秒(00……59) |
%s | 秒(00……59) |
%p | AM 或 PM |
%U | 星期(0……52), 这里星期天是星期的第一天 |
%u | 星期(0……52), 这里星期一是星期的第一天 |
%% | 一个 ‘%’ 百分号字符串 |
2. TIMESTAMP 时间查询
一般数据库表中都会有一个用以记录该行数据被更新时的时间点TIMESTAMP
字段,这个字段在定义时通常会被加上 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
,表示其默认值是当前数据插入表的时间,并且在每次更新数据时都自动更新该字段值为数据库当前时间。对于这类时间戳记,MySQL
可以像使用普通的 INT
类型数据一样方便地进行筛选查询,一个示例如下:
select * from route.t_request where FuiUpdateTime between '2020-03-03 14:15:00' and '2020-03-03 14:21:00'
另外,也可以使用
UNIX_TIMESTAMP()
函数将timestamp
类型指定时间转化为一个INT
类型的时间戳。使用该函数时,如果是无参调用,返回一个Unix
时间戳记(从’1970-01-01 00:00:00’GMT开始的秒数)。如果指定一个 date 参数被调用,则返回从’1970-01-01 00:00:00’ GMT开始到指定时间的秒数值。date可以是一个DATE 字符串、一个 DATETIME 字符串、一个 TIMESTAMP 或以 YYMMDD 或 YYYYMMDD 格式的本地时间的一个数字