Sql server 如何确定;ISO 8601月部分“;SQL Server中日期时间的定义?

Sql server 如何确定;ISO 8601月部分“;SQL Server中日期时间的定义?,sql-server,datetime,casting,iso8601,Sql Server,Datetime,Casting,Iso8601,在我的查询中,我需要使用“ISO8601”-规则获取某个日期的月份部分。要获得ISO week,可以将“ISO_week”作为第一个参数传递给函数。但是一个月的工资是多少 ISO月份与日历月份不同 例如,我们有日期“2010年12月28日”。日历上的月份和年份都说它是“2010年的第12个月”,但国际标准化组织称它是“2011年的第1个月”,因为国际标准化组织的月份开始于该月第1天之前的第一个星期日(即“2010年12月26日”) 那么如何在SQL server中确定ISO月呢?根据您对ISO月

在我的查询中,我需要使用“ISO8601”-规则获取某个日期的月份部分。要获得ISO week,可以将“ISO_week”作为第一个参数传递给函数。但是一个月的工资是多少

ISO月份与日历月份不同

例如,我们有日期“2010年12月28日”。日历上的月份和年份都说它是“2010年的第12个月”,但国际标准化组织称它是“2011年的第1个月”,因为国际标准化组织的月份开始于该月第1天之前的第一个星期日(即“2010年12月26日”)


那么如何在SQL server中确定ISO月呢?

根据您对ISO月的定义,您应该能够比较您离月末和星期几的距离,并知道您的ISO月是否与公历月匹配

DECLARE @date TABLE (d DATE, expected INT)
INSERT INTO @date VALUES 
 ('2014-03-23',3)
 ,('2014-03-24',3)
 ,('2014-03-25',3)
 ,('2014-03-26',3)
 ,('2014-03-27',3)
 ,('2014-03-28',3)
 ,('2014-03-29',3)
 ,('2014-03-30',4)
 ,('2014-03-31',4)
 ,('2014-04-01',4)
 ,('2010-12-28',1)

SET DATEFIRST 7 --sunday/default us

SELECT DATEPART(DAY,EOMONTH(d)) EndOfMonth
      ,DATEPART(DAY,d) DayOfMonth
      ,DATEPART(d,EOMONTH ( d)) - DATEPART(D,d) [EoM-DoM]
      ,DATEPART(WEEKDAY,d) DayOfWeek
      --here's the real work
      ,CASE WHEN 7 - DATEPART(WEEKDAY,d) > DATEPART(d,EOMONTH ( d)) - DATEPART(D,d)
            THEN DATEPART(MONTH,DATEADD(m,1,d))
            ELSE DATEPART(MONTH,d)
       END [iso-month]
      ,expected          
  FROM @date

ISO month没有DATEPART参数,因为ISO month似乎不是标准的东西。()所以你需要一个基于“ISO月”定义的公式。从没听说过ISO月。你能给出定义的来源吗?在“Gesellschaft für Konsumforschung”(GFK集团)市场研究公司的文件中定义为“ISO月和周”。他们给我们发送了这样的数据表,作为业务分析的输入。非常感谢!这就是我要找的。