DATENAME不能与集团合作,通过

DATENAME不能与集团合作,通过

问题描述:

我有一个返回预期数据的SQL查询:DATENAME不能与集团合作,通过

SELECT intMonth as Month 
, intYear AS Year, 
Sum([intExposureHours]) as [Total Hours] 
    FROM tblSSQReleaseToMajor RTM 
    INNER JOIN tblCompany C On RTM.CompanyID = C.CompanyID 
    AND C.bitActive = 1 
    INNER JOIN [tblIncidentDetailByOperatorByMonth] BM ON RTM.MajorID = BM.OperatorID 
    AND BM.ContractorID = RTM.CompanyID 
     AND BM.OperatorID = 47792 
    AND BM.intYear = 2017 
     Group By intMonth, intYear 

enter image description here

然而,当我尝试将数字月份更改为月份名称如下:

SELECT DateName(month,intMonth) as Month 
, intYear AS Year, 
Sum([intExposureHours]) as [Total Hours] 
    FROM tblSSQReleaseToMajor RTM 
    INNER JOIN tblCompany C On RTM.CompanyID = C.CompanyID 
    AND C.bitActive = 1 
    INNER JOIN [tblIncidentDetailByOperatorByMonth] BM ON RTM.MajorID = BM.OperatorID 
    AND BM.ContractorID = RTM.CompanyID 
     AND BM.OperatorID = 47792 
    AND BM.intYear = 2017 
     Group By intMonth, intYear 

我得到这个:

enter image description here

更改 “分组依据” 条款 “Group By DateName(month,intMonth), intYear

产生以下:

enter image description here

谁能告诉我,为什么我没有得到一月,二月,三月,四月五月?

任何援助非常感谢!

+1

请添加DBMS标记 – Jens

+0

我试过了。这是第二个例子。 –

+0

因为DATENAME想要第二个参数的日期 – etsa

DATENAME只适用于实际日期。你必须做一些事情才能使其发挥作用。

SELECT DATENAME(month, DATEADD(month, intMonth - 1, CAST('2017-01-01' AS DATETIME))) as Month 
, intYear AS Year, 
Sum([intExposureHours]) as [Total Hours] 
    FROM tblSSQReleaseToMajor RTM 
    INNER JOIN tblCompany C On RTM.CompanyID = C.CompanyID 
    AND C.bitActive = 1 
    INNER JOIN [tblIncidentDetailByOperatorByMonth] BM ON RTM.MajorID = BM.OperatorID 
    AND BM.ContractorID = RTM.CompanyID 
     AND BM.OperatorID = 47792 
    AND BM.intYear = 2017 
     Group By intMonth, intYear 

编辑:对不起,回答你为什么发生这种情况的问题,请尝试以下查询:

SELECT CAST(1 AS DATETIME) -- 1900-01-02 00:00:00.000 
SELECT CAST(42919 AS DATETIME) -- is today, the 42,919th day since January 1, 1900 

的SQL Server实际存储日期为整数。当您将'1'作为日期时,它会将其视为“1900-01-02 00:00:00.000”。因此,它表示该月份是1月份的所有结果,因为您正在输入数字1-12。它认为你说的是​​1900年1月2日至13日。这就是为什么它抓住每一个1月份。

+0

非常感谢!这使得现在有很多意义! –