在单个t-sql查询中将hh:mm设置为24小时格式 - SQL Server 2012

时间:2015-07-13 08:12:08

标签: sql-server date datetime

我得到一个返回一些hh:ss时间值的查询。然而问题是它以PM / AM格式返回它,而它需要是24小时格式。我无法更改全局语言设置,因为此24小时时间设置是特定于查询的。

我想知道如何解决这个问题? 我现在得到的查询如下:

SELECT        
    dbo.qryMPDisplayPre.Datum, dbo.qryMPDisplayPre.Relatie, 
    dbo.qryMPDisplayPre.[Order], dbo.qryMPDisplayPre.Status, 
    dbo.WorkOrder.DeviceID, dbo.Relaties.RelatieNaam AS Monteur, 
    dbo.Orders.Omschrijving AS OrderOmschrijving, 
    Format(dbo.WorkOrder.WBTravelDeparture, 'hh:mm') AS TravelDeparture, 
    Format(dbo.WorkOrder.WBTravelArrival, 'hh:mm') AS TravelArrival, 
    Format(dbo.WorkOrder.WBWorkArrival, 'hh:mm') AS WorkArrival, 
    Format(dbo.WorkOrder.WBWorkDeparture, 'hh:mm') AS WorkDeparture, 
    (CASE WHEN WorkOrder.[WBtravelhours] IS NULL 
            THEN 0 ELSE (CAST(WorkOrder.[WBTravelHours] * 100.0 / 100.0 AS DECIMAL(30, 2))) END) AS TravelHours, 
    (CASE WHEN WorkOrder.[wbworkhours] IS NULL 
            THEN 0 ELSE (CAST(WorkOrder.[WBWorkHours] * 100.0 / 100.0 AS DECIMAL(30, 2))) END) AS WorkHours, 
    dbo.qryWBMontageGeboekt.Geboekt, dbo.Orders.OpdAdres, 
    dbo.Orders.OpdPC, dbo.Orders.OpdPlaats, 
    LEFT(dbo.Orders.Omschrijving, 9) AS Expr1
FROM            
    dbo.qryWBMontageGeboekt 
RIGHT OUTER JOIN
    dbo.Orders 
RIGHT OUTER JOIN
    dbo.Relaties 
RIGHT OUTER JOIN
    dbo.WorkOrder 
RIGHT OUTER JOIN
    dbo.qryMPDisplayPre ON dbo.WorkOrder.WONummer = dbo.qryMPDisplayPre.[Order] 
                        AND dbo.WorkOrder.WOStatus = dbo.qryMPDisplayPre.Status 
                        AND dbo.WorkOrder.WOAssignmentDate = dbo.qryMPDisplayPre.Datum 
    ON dbo.Relaties.RelatieNummer = dbo.qryMPDisplayPre.Relatie 
    ON dbo.Orders.Nummer = dbo.qryMPDisplayPre.[Order] 
    ON dbo.qryWBMontageGeboekt.Datum = dbo.qryMPDisplayPre.Datum 
       AND dbo.qryWBMontageGeboekt.Relatie = dbo.qryMPDisplayPre.Relatie 
       AND dbo.qryWBMontageGeboekt.[Order] = dbo.qryMPDisplayPre.[Order]
WHERE        
    (dbo.qryMPDisplayPre.Datum > '11/1/2012') 
    AND (dbo.qryMPDisplayPre.Status <> 0)

有点奇怪,因为WorkArrival中的值以24小时格式正确显示。虽然TravelDepartureTravelArrivalWorkDeparture中的值不是,但它们的格式与WorkArrival格式相同。

所以这让我相信它们被取出的值,WorkOrder表有问题。虽然这个表包含24小时的日期时间,但它们都是相同的(所以这不是问题)。

请在此处查看获取值的workorder表:

enter image description here

如您所见,这是所有24小时HH:MM值的日期。

现在,您可以在下面看到查​​询结果及其PM / AM格式的时间值:

enter image description here

正如您所看到的,查询结果非常奇怪。似乎WorkArrival字段返回其值正确,但其他字段不正确。同样奇怪的是,字段TravelDeparture正确地返回了一些值(2个顶部值),但其他字段不正确..

任何线索如何发生这种情况,以及如何让值在24小时内恢复(在查询结果中)。

1 个答案:

答案 0 :(得分:2)

在你的例子中,它们都应该是12小时格式,我认为没有理由不是这种情况。 12小时的格式是'hh',你在所有地方都使用它。

这是您的原始查询吗?如果没有,请检查大小写的格式字符串。 24小时的格式恰好是'HH'(大写而不是小写是唯一的区别)。