Sql server 从datetime开始计算小时数,并将;“天”;野外

Sql server 从datetime开始计算小时数,并将;“天”;野外,sql-server,Sql Server,使用SQL Server,我有以下几点: SELECT DATENAME(DW, DATEADD(DAY, 0, @mindate)) AS Day_of_Week , @crewon AS Crew_On , ISNULL(SUM(( CONVERT(NUMERIC(8, 2), C.FinishLength) / 2000 )), 0) AS Finished_Tons , ISNULL(SUM(CASE WHEN C.RepairCode LIKE '%A%'

使用SQL Server,我有以下几点:

SELECT  DATENAME(DW, DATEADD(DAY, 0, @mindate)) AS Day_of_Week ,
    @crewon AS Crew_On ,
    ISNULL(SUM(( CONVERT(NUMERIC(8, 2), C.FinishLength) / 2000 )), 0) AS Finished_Tons ,
    ISNULL(SUM(CASE WHEN C.RepairCode LIKE '%A%'
                    THEN ( CONVERT(NUMERIC(8, 2), C.FinishLength)
                           / 2000 )
               END), 0) AS A_Tons
FROM    NYS2SawPieces C
WHERE   RIGHT(C.ShiftIdent, 1) = @crewon
    AND C.ProdTime >= @mindate
    AND C.ProdTime <= DATEADD(DAY, 1, @mindate)

您可以使用
WHERE
between
sql命令帮助您按小时筛选查询,大致如下:

WHERE hour(your_datetime_field) between 6 and 18

其中
在选择查询中返回的数据时充当过滤器。语句的其余部分给出了希望
您的\u datetime\u字段
介于之间的小时数的界限。

使用CASE语句应用条件逻辑来确定输出:

SELECT Col1, Col2,
    CASE WHEN DATEPART(HOUR,C.ProdTime) BETWEEN 6 AND 18 THEN 'DAYS'
         ELSE 'NIGHTS' 
    END AS Shift
FROM....

这将输出一个名为
Shift
的新列,如果值介于6和8之间,该列将输出
DAYS
,否则将输出
NIGHTS

请使用示例数据和所需结果编辑您的问题。我同意Gordon的观点,然而,DATEPART将成为您的解决方案,无论您希望在回答中包含一个解释,说明为什么这会有所帮助。你也应该读。我读了那篇文章,很有帮助,但不是我需要的。我只需要从时间戳中提取小时,这样我就可以发布该班组的轮班(白天或晚上)。在Where子句中,我从shiftident的右字符中获取机组成员,从ProdTime获取一周中的某一天。这看起来是最有希望的,但当我将其放入select列表中时,我得到了错误:“列'NYS2SawPieces.ProdTime'在select列表中无效,因为它未包含在聚合函数或GROUP BY子句中。”您使用的是sum聚合,但没有任何分组。使用sum时,select中的所有列都需要应用聚合函数(min、max、count、sum等)或者它们需要分组。没有看到一些实际的源/示例数据和所需的输出,很难进一步提供建议。绝对正确。我将请求组合在一个Select语句下。当我将昼夜查询放在单独的Select语句中时,效果非常好。感谢大家的帮助。
SELECT Col1, Col2,
    CASE WHEN DATEPART(HOUR,C.ProdTime) BETWEEN 6 AND 18 THEN 'DAYS'
         ELSE 'NIGHTS' 
    END AS Shift
FROM....