2015-07-13 36 views
1

我收到了一個查詢,它返回一些hh:ss時間值。然而問題是它以PM/AM格式返回,而它需要24小時格式。我無法更改全局語言設置,因爲此24小時時間設置是查詢特定的。在單個t-sql中設置hh:mm到24小時格式查詢 - SQL Server 2012

我想知道如何解決這個問題? 我現在得到的查詢如下:

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小時格式正確顯示這是有點奇怪。儘管TravelDeparture,TravelArrivalWorkDeparture中的值不是在格式化時與WorkArrival相同。

所以這使我相信從它們被提取的值WorkOrder表中有錯誤。雖然這個表格包含24小時的日期時間,並且它們都是一樣的(所以這不是問題)。

看到這裏從值取其中workorder表:

enter image description here

正如你可以看到這是提供24小時HH所有日期:MM值。現在

下面你可以看到查詢結果,其PM/AM格式化時間值:

enter image description here

正如你所看到的查詢結果是非常奇怪的。看來WorkArrival字段返回正確的值,但其他字段沒有。還有一個奇怪的事實是,字段TravelDeparture正確地返回了一些偏離它的值的值(2個最高值),但其他值不正確。

任何線索如何發生這種情況,以及如何讓值在24小時內返回莊園(在查詢結果中)。

+0

使用'CONVERT(VARCHAR(5),dbo.WorkOrder.WBTravelArrival,108)'得到了正確的結果。雖然仍然想知道爲什麼在一個領域得到正確的價值觀,而在其他領域。 – Nicolas

回答

2

在你的例子中,他們應該都是12小時格式,我沒有理由不這樣做。 12小時的格式是'hh',你在所有地方都使用它。

這是您的原始查詢?如果沒有,那麼檢查你的格式字符串是否大寫/小寫。 24小時的格式恰好是'HH'(大寫而不是小寫是唯一的區別)。

+0

是的,這是原來的查詢,所以沒有線索爲什麼它在一些地方做錯誤的格式。感謝您使用HH的信息。我不知道!我把所有的......小寫改爲大寫,現在它得到正確的時間! – Nicolas