在T-SQL中将DateTime转换为yyyyMMddHHmm

Ref*_*din 1 t-sql datetime sql-server-2008

以下是我唯一的选择吗?我希望有一种更好,更清洁的方法来实现这一目标.

这是,我的日期需要最终格式化如此 - > 201301080105,于2013年1月8日凌晨1点05分.

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

Dam*_*ver 9

这比原版少了一些斩波,但我坚持认为最好在你的表示层中做到这一点 - 或者在任何地方,实际上,使用一般的格式化设施,而不是数据库:

select CONVERT(varchar(20),myDate,112) + REPLACE(CONVERT(varchar(5),myDate,108),':','')
Run Code Online (Sandbox Code Playgroud)

观察:112是用于转换日期部分的更好的样式,因为它已经没有分隔符.并且,如果您指定转换的长度并且转换的字符串不适合,则其余的将被丢弃.这就是我从时间中消除秒部分的方式,只允许空间持续数小时和数分钟.但是没有样式在时间部分不包括分隔符.


Mar*_*rkD 7

这是YYYYMMDDHHMMSS

SELECT CONVERT(VARCHAR(8), GETDATE(), 112) + REPLACE(CONVERT(varchar, GETDATE(), 108), ':','')
Run Code Online (Sandbox Code Playgroud)

对于YYYYMMDDHHMM

SELECT CONVERT(VARCHAR(8), GETDATE(), 112) + LEFT(REPLACE(CONVERT(varchar, GETDATE(), 108), ':',''),4)
Run Code Online (Sandbox Code Playgroud)

要么

SELECT CONVERT(VARCHAR(8), GETDATE(), 112) + REPLACE(LEFT(CAST(GETDATE() AS TIME), 5), ':', '')
Run Code Online (Sandbox Code Playgroud)