根据日期参数从表中选择周末或工作日数据

Posted

技术标签:

【中文标题】根据日期参数从表中选择周末或工作日数据【英文标题】:Select weekend or weekday data from a table based on date param 【发布时间】:2013-08-17 14:52:24 【问题描述】:

如何从基于工作日或周末的表格中选择数据,例如 如果日期是工作日,则仅从表中选择历史工作日数据 & 如果日期是周末,则仅选择历史周末数据。

我曾尝试以这种方式做到这一点,但没有运气

DECLARE @MyDate DATE = '08/17/2013'

SELECT datename(dw,@MyDate)

SELECT * FROM MyTable
WHERE 
datename(dw,DateColumnInTable) IN ( 
CASE WHEN (datename(dw,@MyDate) IN ('Saturday','Sunday')) THEN '''Saturday'',''Sunday'''
ELSE  'Monday'',''Tuesday'',''Wednesday'',''Thursday'',''Friday'
END )

我可以在我的表中看到周六和周日的大量数据,但这个查询给了我空白记录集。

【问题讨论】:

为什么要投反对票?我先尝试过,然后在谷歌上搜索,然后搜索 SO,我的问题不是主观的。我哪里错了? 【参考方案1】:

这是一种方法:

DECLARE @MyDate DATE = '08/17/2013'

IF (DATEPART(weekday, @MyDate) IN (1,7))
    SELECT * 
    FROM MyTable
    WHERE DATEPART(weekday, DateColumnInTable) IN (1,7)
ELSE
    SELECT * 
    FROM MyTable
    WHERE DATEPART(weekday, DateColumnInTable) BETWEEN 2 AND 6

如果您想在一个子句中执行此操作,您可以执行以下操作,但效果可能会更差:

SELECT *
FROM MyTable
WHERE (DATEPART(weekday, @MyDate) IN (1,7) AND DATEPART(weekday, DateColumnInTable) IN (1,7))
OR (DATEPART(weekday, @MyDate) BETWEEN 2 AND 6 AND DATEPART(weekday, DateColumnInTable) BETWEEN 2 AND 6)

【讨论】:

DATEPART(weekday,...) 不确定 @BogdanSahlean 不,不是,但您可以使用日期表并加入其中,或参考***.com/questions/1803561/… @Ic 我的 Select 子句很大,我可以在一个子句中完成吗? @Zerotoinfinite 已编辑以包含一个选项 @Ic。非常感谢:) 但我仍然不知道为什么我投了反对票。不过,感谢您的推动

以上是关于根据日期参数从表中选择周末或工作日数据的主要内容,如果未能解决你的问题,请参考以下文章

从表值参数将数据插入表中

mysql 根据数据所在的表从表中选择

从表中选择一个标量值

在 Redshift 中从表中选择 Date1、Date2

通过只知道没有时间的日期从表中选择 (ORACLE)

从 strtotime 中排除周末