Mysql和 ClickHouse计算时间函数的差值的区别(dateDiff和TIMESTAMPDIFF)

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:30' ),'%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,
	/*计算 分钟 这里两个日期差值大于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;

结果对比:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值