【问题标题】:GET Month, Quarter based on Work Week number根据工作周数获取月份、季度
【发布时间】:2023-03-14 23:45:01
【问题描述】:

我希望根据工作周数获取月份和季度。

例如:如果工作周数是 7,那么它属于 Quarter=1 和 Month = 2。

同样,如果 WK = 35,我应该能够得到季度 = 2 和月份 = 8

等等。

【问题讨论】:

  • ISO 周数还是其他?如果在周中发生变化,则月份/季度是什么?
  • 那一年呢?说如果你通过了 7 个工作周,你想要哪一年的季度和月份?

标签: sql-server


【解决方案1】:

也许有一个函数来处理这个.....

函数定义

CREATE FUNCTION dbo.get_Quater_Month (@WeekofYear INT)
RETURNS Table 
AS
RETURN
(WITH X AS
 (
  SELECT TOP (CASE WHEN YEAR(GETDATE()) % 4 = 0 THEN 366 ELSE 365 END) 
      DATEADD(DAY 
             ,ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1
             , CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '0101' )      
                      DayNumber
  From master..spt_values
 )
SELECT DATEPART(QUARTER,MIN(DayNumber)) AS [QUARTER]
      ,DATEPART(MONTH,MIN(DayNumber))   AS [Month]
FROM X 
WHERE DATEPART(WEEK,DayNumber) = @WeekofYear)

测试

SELECT * FROM dbo.get_Quater_Month (7)

结果

╔═════════╦═══════╗
║ QUARTER ║ Month ║
╠═════════╬═══════╣
║    1    ║   2   ║
╚═════════╩═══════╝

【讨论】:

  • 请问为什么 function 而不是 sp?
  • 好吧 sp 会更好,但考虑到这是一个内联表函数,性能应该不是问题。
猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 2014-12-13
  • 2019-05-15
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
相关资源
最近更新 更多