Mysql和ClickHouse计算时间函数的差值的区别(dateDiff和TIMESTA。。。
TIMESTAMPDIFF函数和dateDiff函数分别是Mysql和 ClickHouse数据库的计算两个⽇期差值的函数,在项⽬中踩过坑,所以在此记录⼀下有共同点和异同点,避免今后继续踩坑。
注:这⾥ mysql的版本为8.0.25,clickhouse为20.12.5.14
⼀、相同:
1.1、都是计算⽇期差值的函数
1.2、都⽀持 年(year)、⽉(month)、⽇(day)、时(hour)、分(minute)、秒(second)、周(week)、刻钟(quarter) 的差值计算⼆、不相同
mysql的TIMESTAMPDIFF函数结果 是下取整,dateDiff函数结果是向上取整
三、例⼦
mysql
/*⽬前版本为mysql8.0.25
* TIMESTAMPDIFF函数是将两个⽇期相减后得到精确的的时间差值,后下取整
*/
SELECT
/*计算年份这⾥两个⽇期差值⼤于0年但⼩于1年结果为0*/
TIMESTAMPDIFF(YEAR,STR_TO_DATE(CONCAT('2020-11-01',' 00:00:00'),'%Y-%m-%d %H:%i:%s'),STR_TO_DATE(CONCAT('2021-02-01',' 00:00:30' ),'%Y-%m-%d %H:%i:%s')) AS year,
/*计算⽉份这⾥两个⽇期差值⼤于1个⽉但未到2个⽉结果为1*/
TIMESTAMPDIFF(MONTH,STR_TO_DATE(CONCAT('2021-01-21',' 00:00:00'),'%Y-%m-%d %H:%i:%s'),STR_TO_DATE(CONCAT('2021-03-02',' 00:00:3 0'),'%Y-%m-%d %H:%i:%s')) AS month,
/*计算天这⾥两个⽇期差值⼤于0天但未到1天结果为0*/
TIMESTAMPDIFF(DAY,STR_TO_DATE(CONCAT('2021-01-01',' 10:00:00'),'%Y-%m-%d %H:%i:%s'),STR_TO_DATE(CONCAT('2021-01-02',' 01:00:30'), '%Y-%m-%d %H:%i:%s')) AS day,
/*计算⼩时这⾥两个⽇期差值⼤于1⼩时但未到1⼩时结果为1*/
TIMESTAMPDIFF(HOUR,STR_TO_DATE(CONCAT('2021-01-01',' 00:40:00'),'%Y-%m-%d %H:%i:%s'),STR_TO_DATE(CONCAT('2021-01-01',' 02:10:30' ),'%Y-%m-%d %H:%i:%s')) AS hour,
/*计算分钟这⾥两个⽇期差值⼤于1分钟但未到2分钟结果为1*/
TIMESTAMPDIFF(MINUTE,STR_TO_DATE(CONCAT('2021-01-01',' 10:10:40'),'%Y-%m-%d %H:%i:%s'),STR_TO_DATE(CONCAT('2021-01-01',' 10:12: 12'),'%Y-%m-%d %H:%i:%s')) AS minute,
/*计算毫秒这⾥两个⽇期差值结果为-10*/
TIMESTAMPDIFF(SECOND,STR_TO_DATE(CONCAT('2021-01-01',' 00:00:40'),'%Y-%m-%d %H:%i:%s'),STR_TO_DATE(CONCAT('2021-01-01',' 00:00: 30'),'%Y-%m-%d %H:%i:%s')) AS second;
clickhosue
/*⽬前版本为clickhouse 20.12.5.14
* dateDiff函数是将两个⽇期相减后得到精确的的时间差值,后上取整
* */
SELECT
/*计算年份这⾥两个⽇期差值⼤于0年但⼩于1年结果为1*/
dateDiff('year', toDateTime('2020-11-01 00:00:00'), toDateTime('2021-02-01 00:00:30')) AS year,
/*计算⽉份这⾥两个⽇期差值⼤于1个⽉但未到2个⽉结果为2*/
dateDiff('month', toDateTime('2021-01-21 00:00:00'), toDateTime('2021-03-02 00:00:30')) AS month,
/*计算天这⾥两个⽇期差值⼤于0天但未到1天结果为1*/
dateDiff('day', toDateTime('2021-01-01 10:00:00'), toDateTime('2021-01-02 01:00:30')) AS day,
/*计算⼩时这⾥两个⽇期差值⼤于1⼩时但未到1⼩时结果为2*/
dateDiff('hour', toDateTime('2021-01-01 00:40:00'), toDateTime('2021-01-01 02:10:30')) AS hour,diff函数
/
*计算分钟这⾥两个⽇期差值⼤于1分钟但未到2分钟结果为2*/
dateDiff('minute', toDateTime('2021-01-01 10:10:40'), toDateTime('2021-01-01 10:12:12')) AS minute,
/*计算毫秒这⾥两个⽇期差值结果为-10*/
dateDiff('second', toDateTime('2021-01-01 00:00:40'), toDateTime('2021-01-01 00:00:30')) AS second;
结果对⽐:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。