T-sql, отметки, отметка времени - PullRequest
9 голосов
/ 22 февраля 2011

Возможно ли получить что-то в C #, например DateTime.Ticks в t-sql?

спасибо за помощь

Ответы [ 3 ]

7 голосов
/ 15 августа 2011

Маловероятно, что вы сможете получить такую ​​же точность из SQL, как DateTime.Ticks, поскольку SQL не выражает время с такой высокой точностью. SQL Server сохраняет время примерно до 1/300 секунды, тогда как один тик представляет сто наносекунд или одну десятую миллионную секунды.

SELECT DATEDIFF(s, '19700101', GETDATE()) 

Приведенный выше запрос даст вам метку времени в стиле Unix, если это сработает, но для внесения каких-либо реальных предложений мне нужно знать, для чего вы используете данные. Если вам нужно более высокое разрешение, чем 3 мс, вам нужно смотреть за пределы SQL.

               DATETIME: 0.01      (3 ms)
QueryPerformanceCounter: 0.0000001 (100 ns)
              DATETIME2: 0.0000001 (7 decimal places, 100 ns)
3 голосов
/ 20 февраля 2012

Не существует специального типа, как в C # .NET, но вы можете 1) написать процедуру .net или 2) использовать такой код (пожалуйста, сравните с .net):

declare @dt datetime; 
set @dt = getutcdate()

declare      @Ticks BIGINT

set @ticks = 
     cast(639905 + datediff(day,'1/1/1753',@dt) as bigint)*864000000000
    +
    cast(datediff(ms,datediff(day,0,@dt) ,@dt) as bigint)*10000

      DECLARE @Days  BIGINT
      DECLARE @DaysBefore1753 BIGINT
      DECLARE @TimeTicks BIGINT
      DECLARE @mSeconds BIGINT

      SET @Days = @Ticks / CONVERT(BIGINT,864000000000)
      SET @DaysBefore1753 = CONVERT(BIGINT,639905)
      SET @TimeTicks = @Ticks % CONVERT(BIGINT,864000000000)
      SET @mSeconds = @TimeTicks / CONVERT(BIGINT,10000)


      select @dt, @ticks, DATEADD(ms,@mSeconds,DATEADD(d,@Days - @DaysBefore1753,CONVERT(DATETIME,'1/1/1753')))
0 голосов
/ 22 февраля 2011

Вы используете SQL Server 2008? Это может помочь.

http://sqlblogcasts.com/blogs/danny/archive/2008/01/10/sql-server-2008-time-data-type.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...