mysql中Long类型日期比较大小

项目里遇到一个功能,需要查出表中,昨天一天某个人的考勤记录。
问题本不复杂,但是表中用户打卡时间为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

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