是否可以在t-sql中获得类似DateTime.Ticks的C#?
感谢您的帮助
答案 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