2012-01-24 90 views
1

我有一個SQL Server 2008表,其中有DateTime列,我想將其轉換爲24h格式。將SQL Server datetime列轉換爲24h格式失敗

的規範引導是沿着線使用的東西:

select CONVERT(datetime, GetDate(), 121) 

這將產生:

2012-01-24 15:22:27.340 

完美。好了,所以將這一知識,讓我們更換GetDate()同爲CONVERT表達式中的列:

select top(5) CONVERT(datetime, LogTable.Timestamp, 121) from LogTable 
order by LogTable.Id DESC 

而我們得到:

2012-01-24 03:25:47.933 
2012-01-24 03:25:46.917 
2012-01-24 03:25:46.547 
2012-01-24 03:25:46.543 
2012-01-24 03:25:46.543 

我在做什麼錯?應該如何設計表達式以使CONVERT在列上工作,而不是在GetDate()函數的輸出上工作?

+1

有什麼不對?爲什麼你的輸出出現意外? – 2012-01-24 20:34:12

+0

LogTable.Timestamp中的實際數據是什麼?這是一個VarChar(或nvarchar)列,還是已經是DateTime? – AllenG

+2

您確定LogTable.Timestamp數據實際上不是3am嗎? –

回答

1

我已經設法找到這個問題的解決方案:將時間戳寫入SQL表的服務是通過格式不正確的方式將「裸體」日期時間寫入字段,使得它們顯示爲「AM」,而不管何時他們到了。

我設法重寫源代碼,將24小時的日期時間寫入現場,現在它按預期執行。我很欣慰地知道我的直覺是正確的,這是一個錯誤的服務。

感謝大家的建議和指導 - 非常感謝!

1

24h格式僅適用於字符串。當您使用:

convert(datetime, ... 

您正在轉換爲日期時間。要顯示24小時,你要轉換爲字符串,如:如果你開始VARCHAR列

convert(varchar(24), ... 

,您可以將其convert到datetime和回VARCHAR在24小時格式顯示。例如,要轉換AM/PM varchar並在24小時內顯示它:

select convert(varchar(16), convert(datetime, 'sep 01 2011 01:23PM', 100), 120) 

此處,樣式100用於解析。樣式120用於格式化。

+0

我明白了;但是,如果24h格式僅適用於字符串,爲什麼CONVERT(datetime,GetDate(),121)會生成帶有24h格式的日期? –

+0

您的客戶可能配置爲顯示24小時日期。 '選擇getdate()'也顯示24小時的日期嗎? – Andomar

相關問題