关于日期类型的一些心得

  这几天在处理涉及到时间的一些sql问题,在处理过程中发现一些很有意思的点。

  首先,对于日期或是时间类型,事实上oracle是将其转化成数字,例如将俩个日期进行相减得到的结果是数值。

这也就是为什么日期和时间俩种类型,同样可以做等值判断。

即得知了这个原理之后,我们不难可以得知为何这个语句能够正确执行,事实上oracle在存储日期类型时,年月日按整数位存储,而时分秒则是按小数为存取。

其次,我们都知道trunc()函数可以用来解决截取数据,例如:

在没有对trunc()函数给定参数的情况下,默认只获取整数部分,由于该文章是处理时间类型,因此不对trunc()函数做过多描述。trunc()函数同样对时间类型有效,因为时间类型本质上存储的是数值,那么用trunc()函数来对时间类型做处理,默认情况下是返回年月日,前些天遇到了一种需求,是讲希望通过当前时间,查询到过去3天的时间内的数据。

假设现在时间是2018/11/17 11:45:00,我希望查询到2018/11/14 至 2018/11/16期间的就诊数量信息,如果使用trunc()函数就能很快的统计出来。当然我们也可以统计每个小时的就诊情况,只需要调整GROUP BY 语句就可以了,这里不做演示。

想到这里,我想其前段时间遇到的一个需求,在统计每日的就诊数量时,如果当前没有就诊人次,希望结果显示为0,我相信绝大多数人第一时间想到的是用nvl(), count()之类的函数来做数量统计,事实上并非如此,这里面设置空值和没有值的区别,不太明白的同学可以查阅相关资料,自己动手测试下就明白了。

当时我采用的办法是通过时间表进行外连接,强行获取就诊日期,来进行统计。当然目前重点是如何通过trunc()函数配合来提高代码的效率。

猜你喜欢

转载自blog.csdn.net/qq_28977279/article/details/84174769
今日推荐