【问题标题】:Returning a week number for any given date and starting from a custom date返回任何给定日期的周数并从自定义日期开始
【发布时间】:2019-05-31 10:20:54
【问题描述】:

好吧,我正在尝试创建一个返回周数的函数,但不像返回正常年份(01-1 月 - 12 月 31 日)的日期部分,我想使用自定义年份(9 月 1 日)返回它- 次年 8 月 31 日) 我也有一些规则,例如:

  • 9 月 1 日总是在第 1 周。 - 星期日是一周的最后一天。
  • 如果星期日是 9 月的第一天,则第一周结束,直到下一个星期日。

我希望使用类似

的代码获得结果
select week_number('01/09/2019')

结果:1​​

select week_number('04/09/2017')

结果:2

【问题讨论】:

  • 请输入rdbms名称
  • 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称,尤其是日期和时间戳功能,产品之间的差异很大。请为您正在使用的数据库产品添加tag postgresql, oracle, sql-server, db2, ...
  • edit您的问题添加您到目前为止编写的函数的代码
  • 嗨,我使用的是 sql-server 2012,我的主要问题是这一年从 9 月 1 日开始,到 8 月 31 日结束,无论如何,9 月的第一天总是第 1 周,星期从星期一开始。我希望我已经足够清楚了。谢谢

标签: sql function dateadd datepart


【解决方案1】:

尝试以下方法:

一个月中的第几周:

declare @date datetime = '01/09/2017'

select (DATEPART(week,@Date)- DATEPART(week,DATEADD(m, DATEDIFF(m, 0, @Date), 0))) 

一年中的第几周:

declare @date datetime = '01/09/2017'

SELECT DATEPART(wk,@Date)

【讨论】:

  • 感谢 miguel 的帮助,我非常感谢。上面的代码返回周数,而我想返回周数:01/09/2019 是第一周,31/08/2019 是 53 周
  • 嗨,Kevin,您尝试 SELECT DATEPART(wk, '09/01/2019') 吗?
  • 是的,实际上主要问题是我有一个自定义年份:01/09 到 30-08 以及我上面提到的所有规则
  • 嗨,kevin,你有不同的日期格式吗?是这样吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
相关资源
最近更新 更多