在T-SQL中将DateTime转换为yyyyMMddHHmmss

时间:2013-01-08 07:12:14

标签: sql-server-2008 tsql datetime

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

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

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

4 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分: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), ':', '')

答案 2 :(得分:1)

尝试使用格式YYYYMMDDHHMISS

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

答案 3 :(得分:0)

在SQL Server 2012+和Azure SQL数据库中,您可以使用

SELECT FORMAT(GETDATE(), 'yyyyMMddHHmmss')

尽管这不适用于Azure SQL数据仓库。