文档章节

今天的时间逻辑以及fix 一个 mysql 程序员错误的习惯

疯狂的兔子
 疯狂的兔子
发布于 2015/04/21 10:43
字数 457
阅读 26
收藏 1

一个很有趣的SQL

SELECT  count(1) from b2c_order  
 WHERE
 b2c_order.create_time >= '2012-09-03 00:00:00' AND b2c_order.create_time <= '2012-09-03 23:59:59';

这个SQL不细看感觉不出来问题,可是细看一下,觉得那么别扭,2012-12-03 23:59:59 这个是什么意思?难道,作者想用这个方法来计算当天么?

"今天"的逻辑

询问了一下开发,确证这是一个统计,统计当天的交易数,那么这里就带来了一个问题,“今天”在数学上或者在程序里,定义应该是怎样的?
下面的逻辑:

 >= '2012-09-03 00:00:00'  <= '2012-09-03 23:59:59'

能否表示某一天?

显然,上面的逻辑是有问题的,因为,23:59:59 之后,还有一秒钟是属于今天的。一秒钟,对计算机来说,简直像永远那么漫长,能发生的事情和故事实在是太多了,所以,这个逻辑一定是有问题的,因为它少了一秒,那么应该如何表示今天呢?

一秒的作用

当年利森把巴林银行搞垮,只用了十几毫秒。so,一秒的作用,更关键的是会让人将来在对账、在统计的时候,发生莫名奇妙的事情,而要耗费巨大的精力来检查和修理。

"今天“的正确逻辑

实际上,今天的正确逻辑,无非是这么一句话:”大于等于今天的开始,小于明天的开始“,我们只要利用好开闭区间,就可以很好的、无漏洞的表示”今天“,所以,我只要把逻辑改成下面这样:

 >= '2012-09-03 00:00:00'  < '2012-09-04 00:00:00'

就正确无误了!


© 著作权归作者所有

共有 人打赏支持
上一篇: jvm介绍
下一篇: 慢查询分析改进
疯狂的兔子
粉丝 34
博文 178
码字总数 101541
作品 0
北京
后端工程师
私信 提问
Discuz 7.2坑爹集锦-PHP篇 update 20120525

Discuz 7.2坑爹集锦-PHP篇 ucc代表uc_client目录 ucs代表uc_server目录 类型: 代码风格 坑爹指数: ☆ 点评: DZ代码不错,不过其代码风格对于维护来说比较痛苦。 本来应该尽量避免在判断中...

mark35
2012/01/11
0
23
程序员们注意了,这4个生活习惯很容易出卖你的身份

大家都知道程序员做事是非常有逻辑的,在日常生活中就能体现的到,不过有的时候过于追求逻辑化也会是生活失去乐趣,不是有这样一个例子嘛,本来是一道趣味题,问程序员结果就不一样,就是经常...

qq_40433465
05/07
0
0
只有程序员才有的12个习惯, 占了一半以上才是真程序员!

程序员的日常通常是写代码,看别人写的代码,改别人写的代码。 当一个程序员是什么样的一种体验?领着高薪、生活滋润这是自然的。 程序员是比较富有的一个群体,却很少炫富。 程序员的话不多,...

你的社交帐号昵
06/04
0
0
程序员你为什么这么累【续】:编码习惯之参数校验和国际化规范

程序员你为什么这么累【续】:编码习惯之参数校验和国际化规范 程序猿DD | 博客2017-09-097 阅读 校验参数编码国际化程序员 导读: 程序员你为什么这么累? 我的编码习惯 - 接口定义 我的编码...

程序猿DD | 博客
2017/09/09
0
0
[ios学习]零基础学习iOS开发如何分配时间

在培训期间,学生的时间应该如何分配 学生在学习期间的主要工作时间分配 9:00~ 9:30,认真听同学的学习阶段中的分享,俗话说的好"三人行,必有我师"; 9:30~ 18:00,认真听老师的课堂上课,并且...

浩浩老师
2015/09/15
95
0

没有更多内容

加载失败,请刷新页面

加载更多

Jrebel 激活服务,在springboot上面的进行热部署

1.安装JRebel 下载Jrebel插件,官网需要翻墙下载,需要的可以在csdn的下载区去进行下载 打开idea,File->settings 然后重启idea 2.破解JRebel 首先HELP -> JRebel -> Activation 在jrebel se...

glen_xu
51分钟前
1
0
设置版头的图片+网页布局

1.div的background-image(推荐) 2.div+image 1.是只有部分图,2是压图 1.frame 2.js(推荐) 因为frame不好设置大小

木之下
55分钟前
0
0
MyBatis组件之缓存实现及使用

一 .概述 先讲缓存实现,主要是mybatis一级缓存,二级缓存及缓存使用后续补充 Mybatis缓存的实现是基于Map的,从缓存里面读写数据是缓存模块的核心基础功能; 除核心功能之外,有很多额外的附...

Ala6
今天
1
0
SpringBoot中使用@RequestBody时如何自定义需要转换的日期格式

SpringBoot序列化和反序列化Json时默认使用的是Jackson(例如使用@RequestBody反序列化前端传递过来的Json字符串时), 当我们前端使用Json字符串传递到后台时日期格式可能是时间戳(即long类...

帅得拖网速
今天
1
0
可自定义扩展底部列表对话框ListBottomSheetDialogFragment

因为需要,为了方便,构建了一个可以自定义扩展的底部列表对话框,可以应付大部分场景。 效果图如下: 1.默认实现: 2.自定义列表实现 3.自定义头部和列表实现 一.可实现功能 1.默认可实现通...

明月春秋
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部