MySQL 时间相关查询

文章目录

  • 1. INT 类型时间戳查询
  • 2. TIMESTAMP 时间查询

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'

// 函数 date_format() 可格式化 TIMESTAMP 时间为指定形式,从而完成统计
select date_format(FuiUpdateTime, '%Y-%m-%d %H:%i') as time , count(*)
from route.t_request 
where FuiUpdateTime between '2020-03-03 14:15:00' and '2020-03-03 14:21:00' group by time

另外,也可以使用 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 格式的本地时间的一个数字

你可能感兴趣的:(数据库)