【问题标题】: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,我的问题不是主观的。我哪里错了?

标签: datetime sql-server-2012 case


【解决方案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 不,不是,但您可以使用日期表并加入其中,或参考stackoverflow.com/questions/1803561/…
  • @Ic 我的 Select 子句很大,我可以在一个子句中完成吗?
  • @Zerotoinfinite 已编辑以包含一个选项
  • @Ic。非常感谢:) 但我仍然不知道为什么我投了反对票。不过,感谢您的推动
猜你喜欢
  • 2019-04-07
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2012-06-12
  • 1970-01-01
  • 2014-11-25
相关资源
最近更新 更多