mysql中Long类型日期比较大小

在项目中,需要查询昨天某用户的考勤记录,但数据存储为毫秒级的char类型时间戳。通过将Java中的Long类型时间戳乘以1000并转换为MySQL日期,结合date_sub和UNIX_TIMESTAMP函数,可以实现日期范围的比较。简化后的关键操作包括将当前时间减去1天,然后将时间戳转换为毫秒进行比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目里遇到一个功能,需要查出表中,昨天一天某个人的考勤记录。
问题本不复杂,但是表中用户打卡时间为char类型的时间戳(毫秒)。这样一来比较时间范围就麻烦了许多。
还好,网上以为有脾气的博主写的文章帮助了我。(文末附连接)
重点:
mysql数据库中的长整形,比java中的长整形少了秒后买的毫秒数。所以要乘1000.
在mysql数据库中,把“1252999488000”(java中的Long类型)转成日期:

select from unixtime(1252999488)

最后完成我项目上遇到的问题,需要的sql(没有兴趣的直接跳过这一段,看下面的简化):

SELECT
		trd.user_ji_fen_id AS userId,
		trd.approve_id AS approveId,
		trd.proc_inst_id AS procInstId,
		trd.integral AS integral,
		trd.user_check_time AS userCheckTime,
		trd.rule_detail_id AS ruleDetailId,
		tcr.rule_name AS ruleName,
		tar.approve_type AS approveType
FROM
	tid_record_detail trd
LEFT JOIN tid_check_rule_detail tcr ON trd.rule_detail_id = tcr.id
AND tcr.is_delete = 0
LEFT JOIN tid_approve_rule tar ON trd.approve_id = tar.id
AND tar.is_delete = 0
WHERE
	trd.user_ji_fen_id = '174RoWUkR5m1pPyBZbJexb'
AND trd.is_delete = 0
AND trd.user_check_time BETWEEN UNIX_TIMESTAMP(
	DATE_FORMAT(
		DATE_SUB(CURDATE(), INTERVAL 1 DAY),
		'%Y-%m-%d 00:00:00'
	)
) * 1000
AND  UNIX_TIMESTAMP(
	DATE_FORMAT(
		DATE_SUB(now(), INTERVAL 1 DAY),
		'%Y-%m-%d 23:59:59'
	)
) * 1000

简化内容(mysql中Long类型日期比较大小的用法):

select
	* 
from 
	表名
where 
	字段名 <= UNIX_TIMESTAMP(date_sub(now(), INTERVAL 1 DAY))*1000;

这里用到几个mysql函数:
date_sub(now() , INTERVAL 1 DAY)表示获取当前时间再减去一天,
然后通过 UNIX_TIMESTAMP() 转成秒,再乘以1000转成毫秒,
再与需要比较的字段进行比较。

附带一篇讲mysql获取当天,昨天,本周,本月,上周,上月的起止时间的博客,可以与本文所描述的“mysql中Long类型日期比较大小”结合使用【例子就是上面,让大家跳过不看的那段,我自己项目中用的那段sql】

转自:http://blog.sina.com.cn/s/blog_61d8d9640102vajl.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值