首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-sql、记号、时间戳

T-sql、记号、时间戳
EN

Stack Overflow用户
提问于 2011-02-22 23:29:17
回答 3查看 14.1K关注 0票数 10

在t-sql中有可能得到像DateTime.Ticks这样的C#吗?

感谢你的帮助

EN

回答 3

Stack Overflow用户

发布于 2011-08-16 03:31:17

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

代码语言:javascript
复制
SELECT DATEDIFF(s, '19700101', GETDATE()) 

上面的查询将为您提供一个Unix样式的时间戳,但为了给出任何真正的建议,我需要知道您使用这些数据的目的。但是,如果您需要比3ms更高的分辨率,则需要查看SQL之外的内容。

代码语言:javascript
复制
               DATETIME: 0.01      (3 ms)
QueryPerformanceCounter: 0.0000001 (100 ns)
              DATETIME2: 0.0000001 (7 decimal places, 100 ns)
票数 7
EN

Stack Overflow用户

发布于 2012-02-20 21:41:05

没有像C#.NET中那样的特殊类型,但您可以1)编写.net过程或2)使用这样的代码(请与.net比较):

代码语言:javascript
复制
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')))
票数 4
EN

Stack Overflow用户

发布于 2011-02-22 23:37:20

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5080127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档