如何以毫秒的时间在 SQL Server 中打印 GETDATE()?
Posted
技术标签:
【中文标题】如何以毫秒的时间在 SQL Server 中打印 GETDATE()?【英文标题】:How to print GETDATE() in SQL Server with milliseconds in time? 【发布时间】:2011-07-15 19:04:13 【问题描述】:我想在 SQL Server 2008 中打印GETDATE(),我需要以毫秒为单位的时间(这是出于调试目的 - 查找 sp 的执行时间)
我发现了这个差异
SELECT GETDATE()
返回 2011-03-15 18:43:44.100
print GETDATE()
返回 2011 年 3 月 15 日下午 6:44
我认为 SQL Server 会在打印功能中自动进行类型转换。
我需要像这样打印日期2011-03-15 18:43:44.100
感谢您的帮助。
【问题讨论】:
【参考方案1】:SELECT CONVERT( VARCHAR(24), GETDATE(), 113)
更新
PRINT (CONVERT( VARCHAR(24), GETDATE(), 121))
【讨论】:
【参考方案2】:首先,如果您希望获得更高的精度,您可能应该使用SYSDATETIME()
。
要以毫秒为单位格式化数据,请尝试CONVERT(varchar, SYSDATETIME(), 121)
。
对于其他格式,请查看MSDN page on CAST
and CONVERT
。
【讨论】:
Print CAST(GETDATE() as Datetime2(7)) 这也行,谢谢你的回答。 PRINT CAST(SYSDATETIME() AS NVARCHAR(200)) 就像一个魅力【参考方案3】:尝试关注
DECLARE @formatted_datetime char(23)
SET @formatted_datetime = CONVERT(char(23), GETDATE(), 121)
print @formatted_datetime
【讨论】:
【参考方案4】:这两个是一样的:
Print CAST(GETDATE() as Datetime2 (3) )
PRINT (CONVERT( VARCHAR(24), GETDATE(), 121))
【讨论】:
【参考方案5】:如果你的 SQL Server 版本支持 FORMAT 函数,你可以这样做:
select format(getdate(), 'yyyy-MM-dd HH:mm:ss.fff')
【讨论】:
【参考方案6】:这相当于 javascript 中的new Date().getTime()
:
使用以下语句以秒为单位获取时间。
SELECT cast(DATEDIFF(s, '1970-01-01 00:00:00.000', '2016-12-09 16:22:17.897' ) as bigint)
使用下面的语句来获取以毫秒为单位的时间。
SELECT cast(DATEDIFF(s, '1970-01-01 00:00:00.000', '2016-12-09 16:22:17.897' ) as bigint) * 1000
【讨论】:
【参考方案7】:创建一个返回格式为 yyyy-mm-hh hh:mi:ss.sss 的函数
create function fn_retornaFecha (@i_fecha datetime)
returns varchar(23)
as
begin
declare
@w_fecha varchar(23),
@w_anio varchar(4),
@w_mes varchar(2),
@w_dia varchar(2),
@w_hh varchar(2),
@w_nn varchar(2),
@w_ss varchar(2),
@w_sss varchar(3)
select @w_fecha = null
if ltrim(rtrim(@i_fecha)) is not null
begin
select
@w_anio = replicate('0',4-char_length( convert(varchar(4), year(@i_fecha)) )) + convert(varchar(4), year(@i_fecha)),
@w_mes = replicate('0',2-char_length( convert(varchar(2),month(@i_fecha)) )) + convert(varchar(2),month(@i_fecha)),
@w_dia = replicate('0',2-char_length( convert(varchar(2), day(@i_fecha)) )) + convert(varchar(2), day(@i_fecha)) ,
@w_hh = replicate('0',2-char_length( convert(varchar(2),datepart( hh, @i_fecha ) ) )) + convert(varchar(2),datepart( hh, @i_fecha ) ),
@w_nn = replicate('0',2-char_length( convert(varchar(2),datepart( mi, @i_fecha ) ) )) + convert(varchar(2),datepart( mi, @i_fecha ) ),
@w_ss = replicate('0',2-char_length( convert(varchar(2),datepart( ss, @i_fecha ) ) )) + convert(varchar(2),datepart( ss, @i_fecha ) ),
@w_sss = convert(varchar(3),datepart( ms, @i_fecha ) ) + replicate('0',3-DATALENGTH( convert(varchar(3),datepart( ms, @i_fecha ) ) ))
select @w_fecha = @w_anio + '-' + @w_mes + '-' + @w_dia + ' ' + @w_hh + ':' + @w_nn + ':' + @w_ss + '.' + @w_sss
end
return @w_fecha
end
go
例子
select fn_retornaFecha(getdate())
结果是:2016-12-21 10:12:50.123
【讨论】:
以上是关于如何以毫秒的时间在 SQL Server 中打印 GETDATE()?的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 2008R2 上以毫秒为单位返回 DATEDIFF