1

像下面这样的东西是我唯一的选择吗?我希望有一种更好、更清洁的方法来实现这一点。

这就是说,我的日期最终需要像这样格式化——> 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

4 回答 4

9

这比原版少了几块切碎,但我坚持我的意见,最好在您的表示层中执行此操作 - 或者任何地方,实际上,使用通用格式化工具,而不是 DB:

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

观察:112 是用于转换日期部分的更好样式,因为它已经没有分隔符。而且,如果您指定了转换的长度并且转换后的字符串不适合,那么其余的将被丢弃。这就是我从时间中消除秒部分的方法,只留出几小时和几分钟的空间。但是没有一种风格在时间部分不包含分隔符。

于 2013-01-08T07:26:43.320 回答
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)

或者

SELECT CONVERT(VARCHAR(8), GETDATE(), 112) + REPLACE(LEFT(CAST(GETDATE() AS TIME), 5), ':', '')
于 2013-01-08T07:29:40.280 回答
2

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

SELECT FORMAT(GETDATE(), 'yyyyMMddHHmmss')

虽然这不适用于 Azure SQL 数据仓库。

于 2018-12-05T17:59:37.693 回答
1

试试这个格式 YYYYMMDDHHMISS

SELECT replace(replace(replace(CONVERT(VARCHAR(19), GETDATE(), 120),'-',''),' ',''),':','')
于 2013-01-08T10:46:31.210 回答