datediff怪异的东西-SQL Server

时间:2019-02-26 13:06:22

标签: sql sql-server

测试:

    select datediff(week, '20190104 23:01:11.821', '20190105 23:01:11.821')
    select datediff(week, '20190104 23:01:11.821', '20190106 23:01:11.821')
    select datediff(week, '20190104 23:01:11.821', '20190107 23:01:11.821')
    select datediff(week, '20190104 23:01:11.821', '20190108 23:01:11.821')
    select datediff(week, '20190104 23:01:11.821', '20190109 23:01:11.821')
    select datediff(week, '20190104 23:01:11.821', '20190113 23:01:11.821')

这将返回

    0
    1
    1
    1
    2

我只在第一个返回值中看到常识。 到底是怎么回事? 例如。最后一个为什么会返回2周? 其他人如何返回他们所返回的东西?

3 个答案:

答案 0 :(得分:3)

Dateiff计算边框的穿越频率。

function BlackFridayPopup() {
    if (isMobile) return;
    if (!$('body').hasClass('homepage') && getCookie('page_count') != 3) return;

    $(window).on('load', function () {
        if (!getCookie('blackFridayPopup')){
           setCookie('blackFridayPopup', '1', '7');
           $('#myModel').modal('show');
        } else {
            return;
        }
    });
}

返回

SELECT DATEPART(WEEK, '20190104 23:01:11.821')
,       DATEPART(WEEK, '20190106 23:01:11.821')

所以越过了一个星期的边界,所以datediff返回1。

答案 1 :(得分:3)

datediff()函数返回两个日期之间的日期部分边界数。

因此,datediff(year, '2018-12-31', '2020-01-01')将返回“ 2”,因为存在两年的边界。

每周边界发生在周六晚上/周日早晨。有两个星期六晚上,所以你有两个星期。

如果您希望更接近周数,请使用day除以7。

答案 2 :(得分:-2)

您确定一周的第一天是什么吗?

您可以按照以下指示日期的方式进行查询,您会知道它在一周中的哪个位置。

SELECT DATEPART(WEEKDAY, GETDATE())

例如,根据您的日期,如果星期几是星期日,则“我会正确”。