mysql 时间类型 字段(精确到时分秒) 怎么比较?
问题描述
我需要根据create_time字段来筛选数据,现在sql 语句如下:
SELECT * FROM `sbhf_alarm` sa WHEREunix_timestamp(sa.create_time) BETWEEN unix_timestamp(’2016-05-25 14:07:56’)AND unix_timestamp(’2017-05-25 14:07:56’)
但是,我发现这种方法由个bug, 就是,当上限时间(上图箭头)过大的时候,会报错。如下图:
原因是,unix_timestamp函数,将时间转化为秒,时间不能太大。
问题:是否还有其他什么更好的方法来筛选时间? 这种问题一般是怎么解决的?请大神赐教,感激不尽……
问题解答
回答1:UNIX_TIMESTAMP返回的是INTEGER而不是BIGINT,所以不能超过2038年(又一说2106年)。
为什么不试试 create_time BETWEEN ’2016-05-25 14:07:56 AND ’2017-05-25 14:07:56’ 呢?
另外,如果追求计算的便捷性,建议时间列类型设为BIGINT,存放以毫秒为单位的Unix时间戳,这样就不会有2038问题了。
回答2:create_time BETWEEN ’2016-05-25 14:07:56’ AND ’2017-05-25 14:07:56’
如果加上毫秒的话,注意用冒号:,
create_time BETWEEN ’2016-05-25 14:07:56:000’ AND ’2017-05-25 14:07:56:000’
相关文章:
1. html - 移动端radio无法选中2. apache - 怎么给localhost后面默认加上8080端口3. 我设置的背景怎么显示不出来4. mysql - 数据库JOIN查询5. c++ - win7在不删除管理员密码的前提下(密码不为空),如何设置开机不需要密码?6. 关于Navicat连接到mysql,我改了root的密码后,Navicat连接报错1862?7. php7.3.4中怎么开启pdo驱动8. python - 用scrapy-splash爬取网站 为啥iframe下的内容没有被返回9. mysql - 数据库建字段,默认值空和empty string有什么区别 11010. windows-7 - Win7中Vmware Workstatoin与Xampp中Apache服务器端口冲突?
