sql语句学习记录(一)

背景:今天同事问我一个sql语句,大体上就是想从post表中有一个职位开始时间date_start和职位结束时间date_end字段(该字段存的是日期而不是时间戳),想从表中吧两个相差90天的帖子查出来。

一直我的sql都挺弱的,基本都是最简单的查询很少会用到函数,写接口也是直接用orm连接单表查询。先说一下我起初的思路因为date_start和date_end两个字段存的不是时间戳,存的是int类型的日期,我就想直接用这个语句:select * from post  where  DATEDIF(date_start ,date_end) <90 order by id desc;

函数:datediff(date1,date2)用来返回计算date1和date2的差值的绝对值。

与这个函数对应还一个计算时间的函数timediff(time1,time2)

函数:timediff(time1,time2)用来返回计算time1和time2的差值的绝对值。

函数说完了说一下这句话里面有一个坑就是如果这个post的date_start和date_end跨年了,就会出现问题,搜出来机会不全了。

想来好久后来问了一个rd,说直接用转成时间戳的形式不就没有这个问题了,才恍然大悟,后来又想怎么计算相差90天时间搓是多少我起初还傻了吧唧用

select  UNIX_TIMESTAMP('2016-01-01'),select UNIX_TIMESTAMP('2016-03-31');来计算90天时间搓是多少。我不知道有多少小伙伴不知道和我一样不知道时间戳啥个啥,本质时间戳就是从1970年1月1号 0分0秒到今天一共经过了多少秒,所以90天时间戳就直接是90*24*60*60=777600.

所以就把sql语句改成:select * from post  where (UNIX_TIMESTAMP(date_end)-UNIX_TIMESTAMP(date_start))/86400 <90 order by id desc;

函数UNIX_TIMESTAMP()用来把string类型日期转换成对应的时间戳。

其实这个是个特别简单sql语句,还是用的太少了,后期加强一下把遇到的坑都总结一下。这几天在接口框架中增加了logging模块,觉得这个模块有点难用,准备找个时间整体的简单总结一下,毕竟日志模块是一个任何一个框架都必备的基础功能。太晚了下班准备撤了。。。。。


猜你喜欢

转载自blog.csdn.net/gogoboi_jin/article/details/74275791