以下是我唯一的选择吗?我希望有一种更好,更清洁的方法来实现这一目标。
这是,我的日期需要最终格式化 - > 201301080105,于2013年1月8日凌晨1点05分。
SELECT SUBSTRING(REPLACE(CONVERT(varchar, GETDATE(), 111), '/','') + REPLACE(CONVERT(varchar, GETDATE(), 108), ':',''),0,13) AS 'My Formatted Date'
答案 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数据仓库。