美文网首页
SQL:利用系统spt_values构造特定日期表

SQL:利用系统spt_values构造特定日期表

作者: 徐胥 | 来源:发表于2021-04-25 10:27 被阅读0次

    spt_values表是SQL自带的系统常量表,一般在master库中。spt_values表中,最被常用的就是[TYPE]为P的数据,含0-2047共2048个整数。

    spt_values中type为P的数据内容

    做日期表的思路,是选定某日的日期,日期依次增序,以日期为键产出星期等,最终就形成了日期表。这里,我们尝试做月表,只需要取每月一日即可。

    月表形成

    以上代码解释两个点:

    ① inner join 后的那个构造表curdt,其实只会返回当前月1号的日期,也是我们选定的起始月。

    我们知道数据库的日历中,其实是存在起止日期的,超过这个日期,数据库是不认识这个日期的。这里我们就用了SQL的这个特性,我们用datediff去取getdate()和最小日期之间的月份数,再在最小日期上加上这个月份数,因为以月为单位,无关天数,故我们可以取到当前月的第一天。这个方法也被我们广泛用在日期处理上。

    我们在dateadd中可以利用0,指代1900-01-01。那么1是指代哪个日期呢,大家不妨去运行试试看。

    选取当前日期和起始日期之间的相隔月份数

    ② inner join 的on后面写的是1= 1,注意这个不可乱用,因为会笛卡尔积。但由于我们的构造表curdt内只有一行日期数据,所以sv表不会翻倍数据。


    好啦,由于我们的代码没有日期限制,所以我们将会取到当前月开始的2048个月的数据,未免有些太多了。我们可以在where条件中,通过sv.number直接限定月份数,也可以利用我们构造的month字段,限定月份数。

    相关文章

      网友评论

          本文标题:SQL:利用系统spt_values构造特定日期表

          本文链接:https://www.haomeiwen.com/subject/rbtdrltx.html