MySql学习使用
第一章 时间差计算并返回 x天x小时x分钟
前言
要求返回当前系统时间和一个时间字符串的差值,单位为天、小时、分钟。
一、查询sql
SELECT
IF
(
str_to_date( `presetTime`, '%Y-%m-%d %H:%i:%s' ) - now( ) > 0,
NULL,
CONCAT(
IF
(
FLOOR( HOUR ( TIMEDIFF( str_to_date( `presetTime`, '%Y-%m-%d %H:%i:%s' ), now( ) ) ) / 24 ) = 0,
'',
CONCAT( FLOOR( HOUR ( TIMEDIFF( str_to_date( `presetTime`, '%Y-%m-%d %H:%i:%s' ), now( ) ) ) / 24 ), '天' )
),
IF
(
FLOOR( HOUR ( TIMEDIFF( str_to_date( `presetTime`, '%Y-%m-%d %H:%i:%s' ), now( ) ) ) / 24 ) >= 1,
IF
(
MOD ( HOUR ( TIMEDIFF( str_to_date( `presetTime`, '%Y-%m-%d %H:%i:%s' ), now( ) ) ), 24 ) = 0,
'0小时',
CONCAT( MOD ( HOUR ( TIMEDIFF( str_to_date( `presetTime`, '%Y-%m-%d %H:%i:%s' ), now( ) ) ), 24 ), '小时' )
),
IF
(
MOD ( HOUR ( TIMEDIFF( str_to_date( `presetTime`, '%Y-%m-%d %H:%i:%s' ), now( ) ) ), 24 ) = 0,
'',
CONCAT( MOD ( HOUR ( TIMEDIFF( str_to_date( `presetTime`, '%Y-%m-%d %H:%i:%s' ), now( ) ) ), 24 ), '小时' )
)
),
IF
(
MINUTE ( TIMEDIFF( str_to_date( `presetTime`, '%Y-%m-%d %H:%i:%s' ), now( ) ) ) = 0,
'1分钟',
CONCAT( MINUTE ( TIMEDIFF( str_to_date( `presetTime`, '%Y-%m-%d %H:%i:%s' ), now( ) ) ), '分钟' )
)
)
) AS timeOutPeriod
FROM TABLE WHERE ID = 'XXX'
效果展示:
二、说明
1、参数说明
1、IF(A, B, C) 条件判断:
若A判断满足,则返回B值,否则返回C
2、str_to_date(A,B)字符串转换:
将字符串A,转化为对应格式B的时间字段。
3、FLOOR(X):
该函数返回X的最大整数值,但不能大于X。
4、MOD(N,M):
该函数返回N除以M后的余数。
5、CONCAT(str1,str2,…):
将字符串str1、str2等进行拼接。
6、MINUTE (TIME):
返回时间的分钟,范围为0至59。
7、HOUR(TIME):
返回时间的小时部分。返回值的范围为0至23的小时值。然而,TIME值的范围实际上要大得多,所以HOUR可以返回大于23的值。
8、TIMEDIFF(date1,date2):
返回两个TIME或DATETIME值之间的差值(格式相同)。
2、效果说明
计算天,使用hour函数获取时间,如果预定时间和当前系统时间只差除去24小时,余数大于0,则向下取整作为天数。
计算小时,取两个时间之间的差值,再除去24,取余数。
计算分钟,取两个时间分钟差值。
其中还添加了其余判断,如果天数大于1,小时不足1小时,展示为1天0小时1分钟。
如果分钟不足1,直接展示1分钟。
发表评论