如何在 SQLServer 中以毫秒为单位及时打印 GETDATE() ?

我想在 SQLServer2008中打印 GETDATE (),我需要以毫秒为单位的时间(这是为了调试目的——查找 sp 的执行时间)

我发现这个区别

  • 返回 2011年03月15日18:43:44.100
  • 返回 Mar 1520116:44 PM 2011年3月15日下午6:44

我认为 SQLServer 在打印功能中会自动进行类型转换。

我需要打印这样的日期 2011-03-15 18:43:44.100

谢谢你的帮助。

247160 次浏览
SELECT CONVERT( VARCHAR(24), GETDATE(), 113)

更新

PRINT (CONVERT( VARCHAR(24), GETDATE(), 121))

首先,如果希望获得更高的精度,可能应该使用 SYSDATETIME()

若要以毫秒格式化数据,请尝试 CONVERT(varchar, SYSDATETIME(), 121)

有关其他格式,请查看 关于 ABC0和 CONVERT的 MSDN 页面

试试跟踪

DECLARE @formatted_datetime char(23)
SET @formatted_datetime = CONVERT(char(23), GETDATE(), 121)
print @formatted_datetime

这两个是一样的:

Print CAST(GETDATE() as Datetime2 (3) )
PRINT (CONVERT( VARCHAR(24), GETDATE(), 121))

enter image description here

UPDATE:

Datetime 是 datetime2(3)

enter image description here

declare @dt datetime2(3)=sysdatetime()
print @dt
Print CAST(sysdatetime() as Datetime2(3) )
print sysdatetime()

enter image description here

如果您的 SQLServer 版本支持 FORMAT 函数,您可以这样做:

select format(getdate(), 'yyyy-MM-dd HH:mm:ss.fff')

This is equivalent to new Date().getTime() in JavaScript :

使用以下语句获取以秒为单位的时间。

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

创建一个返回格式为 yyyy-mm-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-2110.12:50.123