在SQL Server中获得的时间少于“上周日”

时间:2017-01-20 00:32:59

标签: sql sql-server

我希望得到的时间少于“上周日”。

以下代码仅显示小于“当前日期”的时间,是否有小于“上周日”的功能?

SELECT ProjectTitle, TimeByDay
FROM cumulativebyday
Where TimeByDay < CURRENT_TIMESTAMP
Order by TimeByDay ASC;

2 个答案:

答案 0 :(得分:0)

Mysql有一个名为DayOfWeek(date)

的函数

获取当周的当前日期,例如今天将返回5. 1等于星期日,所以今天我们需要回顾5-1天= 4天。 (如果差异为零,我们将在星期天举行,所以我们需要回到7天才能获得最后一个星期日)

使用date_sub(日期减法)和时间戳转换为时间戳,我们可以得到过去最近的星期日的时间戳。我没有测试过这个,但它应该可行。如果要包含或排除该星期日的记录,您可能需要添加一个或减去一个。

Where TimeByDay < TIMESTAMP(DATE_SUB(CURRENT_DATE(), IF(DAYOFWEEK()-1 == 0, 7, DAYOFWEEK()-1))

答案 1 :(得分:0)

不确定您是否正在使用标记中的mysql或sql-server。

这是您可以在sql-server中尝试的内容。

假设工作日以英文返回。也可以考虑使用DATEPART返回的数字作为工作日。同样,它将依赖于服务器配置,因为工作日可以从星期日或星期一开始计数。

SELECT ProjectTitle, TimeByDay
FROM cumulativebyday
Where TimeByDay < 
    DATEADD(DAY, 
        CASE DATENAME(WEEKDAY, CURRENT_TIMESTAMP)  
            WHEN 'Monday' THEN -1
            WHEN 'Tuesday' THEN -2
            WHEN 'Wednesday' THEN -3
            WHEN 'Thursday' THEN -4
            WHEN 'Friday' THEN -5
            WHEN 'Saturday' THEN -6
            WHEN 'Sunday' THEN -7
        END,
        CONVERT(DATE, CURRENT_TIMESTAMP)
    ) 
Order by TimeByDay ASC;