【问题标题】:DATEPART(ww,Date) with SET DATEFIRSTDATEPART(ww,Date) 与 SET DATEFIRST
【发布时间】:2015-01-03 19:41:33
【问题描述】:

我使用的是 SQL Server 2005

我正在尝试使用 DatePart(ww,date) 函数获取星期

我的代码

SELECT datepart(ww,'2012-01-08 00:00:00')

返回 2

但我想要...

返回 1

根据IS0-8601和此表来自website

2012 年 第 1 周 从 2012 年 1 月 2 日到 2012 年 1 月 8 日 ...

我错了吗?

SET DATEFIRST 1 有什么技巧,我正在尝试但没有成功。

感谢您的宝贵时间

我不能使用 ISO_WEEK,因为 SQL Server 2005 不起作用

【问题讨论】:

标签: sql-server sql-server-2005


【解决方案1】:

使用ISO_WEEK:

SELECT datepart(ISO_WEEK,'2012-01-08 00:00:00')

您可以在MSDN 上阅读更多相关信息。

编辑:

我没有意识到ISO_WEEK 在 SQL Server 2005 中不可用。由于它基于一周中的星期四,现在问题转移到从给定日期查找星期四:

DECLARE @Date date = '2012-01-08'
DECLARE @Thursday date = DATEADD(DAY, 3-(DATEPART(WEEKDAY, @Date) + @@DATEFIRST - 2) % 7, @Date)

SELECT (DATEPART(DAYOFYEAR,@Thursday) - 1) / 7 +1

【讨论】:

  • 感谢 Aaron Bertrand,Zoff Dino,但是 ISO_WEEK,不能使用 SQL Server 2005,还有其他方法吗?
  • @yaqui 好吧,考虑到您使用的软件已有 10 年历史且不受主流支持,您可以考虑升级。除此之外,您还可以实现类似Example A in the CREATE FUNCTION docs 的函数。
  • 呃,不是仅基于 2012 年的星期四吗?您的代码能否识别 2010、2011、2013、2014 等 ISO 第一周中所有 7 天的正确周数?
  • 谢谢@AaronBertrand。新代码现在在所有年份都能正常工作。
  • @Aaron Bertrand 谢谢,是的,我必须处理 2012、2013 和 2014 年的旧记录,但我每年都在工作,所以上面的功能对我有用。非常感谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 2020-08-01
  • 2022-12-28
  • 1970-01-01
  • 2015-06-15
相关资源
最近更新 更多