T-sql,ticks,timestamp

时间:2011-02-22 15:29:17

标签: .net sql tsql sql-server-2008

是否可以在t-sql中获得类似DateTime.Ticks的C#?

感谢您的帮助

3 个答案:

答案 0 :(得分:7)

你不可能从DateTime.Ticks中获得与SQL相同的准确性,因为SQL不能以那么高的精度表达时间。 SQL Server仅将时间存储到大约1/300秒,而单个tick则表示一百纳秒或一千万分之一秒。

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)

答案 1 :(得分:3)

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')))

答案 2 :(得分:0)

您使用的是SQL Server 2008吗?这可能有所帮助。

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