Jak wydrukować GETDATE () w SQL Server z milisekundami w czasie?

96

Chcę wydrukować GETDATE () w SQL Server 2008, potrzebuję czasu z milisekundami (służy to do debugowania - aby znaleźć czas wykonania sp)

Znajduję tę różnicę

  • SELECT GETDATE()zwraca 2011-03-15 18: 43: 44.100
  • print GETDATE()zwraca 15 marca 2011 6:44 PM

Myślę, że SQL Server automatycznie typecast w funkcji drukowania.

Muszę wydrukować datę w ten sposób 2011-03-15 18:43:44.100

Dzięki za pomoc.

Ramakrishnan
źródło

Odpowiedzi:

114

Po pierwsze, prawdopodobnie powinieneś użyć, SYSDATETIME()jeśli szukasz większej precyzji.

Aby sformatować dane w milisekundach, spróbuj CONVERT(varchar, SYSDATETIME(), 121).

W przypadku innych formatów sprawdź stronę MSDN w CASTiCONVERT .

Adam Robinson
źródło
3
Drukuj CAST (GETDATE () as Datetime2 (7)) To też działa. Dziękujemy za odpowiedź.
Ramakrishnan
2
PRINT CAST (SYSDATETIME () AS NVARCHAR (200)) działa jak urok
Gabriel Espinoza
53
SELECT CONVERT( VARCHAR(24), GETDATE(), 113)

AKTUALIZACJA

PRINT (CONVERT( VARCHAR(24), GETDATE(), 121))
Kris Ivanov
źródło
33

Jeśli Twoja wersja SQL Server obsługuje funkcję FORMAT, możesz to zrobić w następujący sposób:

select format(getdate(), 'yyyy-MM-dd HH:mm:ss.fff')
Stefan Michev
źródło
12

te 2 są takie same:

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

wprowadź opis obrazu tutaj

Marcello Miorelli
źródło
1

Spróbuj obserwować

DECLARE @formatted_datetime char(23)
SET @formatted_datetime = CONVERT(char(23), GETDATE(), 121)
print @formatted_datetime
Lav
źródło
1

Jest to odpowiednik new Date().getTime()w JavaScript:

Użyj poniższej instrukcji, aby uzyskać czas w sekundach.

SELECT  cast(DATEDIFF(s, '1970-01-01 00:00:00.000', '2016-12-09 16:22:17.897' ) as bigint)

Użyj poniższej instrukcji, aby uzyskać czas w milisekundach.

SELECT  cast(DATEDIFF(s, '1970-01-01 00:00:00.000', '2016-12-09 16:22:17.897' ) as bigint)  * 1000
S Kotra
źródło
1

Utwórz funkcję o zwracanym formacie rrrr-mm-gg 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

Przykład

select fn_retornaFecha(getdate())

a wynik to: 2016-12-21 10: 12: 50.123

admincedep
źródło