2013-01-08 88 views
1

就像下面我唯一的選擇一樣?我希望有一個更好,更乾淨的方法來實現這一點。在T-SQL中將DateTime轉換爲yyyyMMddHHmm

這樣,我的約會最終需要格式化爲 - > 201301080105於1月8日上午1:05。

SELECT SUBSTRING(REPLACE(CONVERT(varchar, GETDATE(), 111), '/','') + REPLACE(CONVERT(varchar, GETDATE(), 108), ':',''),0,13) AS 'My Formatted Date'

+2

在表示層而不是在數據庫中進行這種格式化通常會更好 - 儘量將日期時間儘可能保留爲日期時間。 –

回答

8

這有幾個少件比原來砍的,但我會用我的評論立場,這是更好地做到這一點在你的表示層 - 或任何地方,真的,與一般的格式化工具,而不是DB:

select CONVERT(varchar(20),myDate,112) + REPLACE(CONVERT(varchar(5),myDate,108),':','') 

觀察:112是一個更好的style使用用於轉換的日期部分,因爲它已經具有沒有分隔符。而且,如果您爲轉換指定了一個長度並且轉換後的字符串不適合,那麼剩下的部分將被丟棄。這就是我如何從時間中消除秒部分,只允許空間幾小時和幾分鐘。但沒有風格在時間部分不包含分隔符。

+0

我使用了你的答案和我的原始 - >'CONVERT(varchar,GETDATE(),112)+ REPLACE(CONVERT(varchar(5),GETDATE(),108),'''''')AS '處理日期時間',' 這樣感覺更乾淨。 不幸的是,在我懷疑任何人都在意聽到的情況下,把它放在這裏真的很有意義。這就是說,我通常同意你的看法,並感謝你的答案。 –

+0

@RefractedPaladin - 那麼,你的原始使用'myDate'而不是'GETDATE()',所以這就是我在我的答案(即使我真的用'GETDATE()'在那個地方寫的)。 –

7

這是YYYYMMDDHHMMSS

SELECT CONVERT(VARCHAR(8), GETDATE(), 112) + REPLACE(CONVERT(varchar, GETDATE(), 108), ':','') 

對於爲yyyymmddhhmm

SELECT CONVERT(VARCHAR(8), GETDATE(), 112) + LEFT(REPLACE(CONVERT(varchar, GETDATE(), 108), ':',''),4) 

OR

SELECT CONVERT(VARCHAR(8), GETDATE(), 112) + REPLACE(LEFT(CAST(GETDATE() AS TIME), 5), ':', '') 
+0

謝謝,不幸的是我不能有SS,這就是爲什麼我必須做SUBSTRING() –

+0

對不起,我錯過了。查看更新。 – MarkD

+0

我是我的我!我喜歡這個解決方案,謝謝;) – 2013-10-30 12:53:40

1

嘗試此格式YYYYMMDDHHMISS

SELECT replace(replace(replace(CONVERT(VARCHAR(19), GETDATE(), 120),'-',''),' ',''),':','')