在t-sql中有可能得到像DateTime.Ticks这样的C#吗?
感谢你的帮助
发布于 2011-08-16 03:31:17
您不太可能从SQL中获得与DateTime.Ticks相同的准确性,因为SQL不能以那么高的精度表示时间。SQL Server仅将时间存储到大约1/300秒,而单个刻度表示100纳秒或十万分之一秒。
SELECT DATEDIFF(s, '19700101', GETDATE()) 上面的查询将为您提供一个Unix样式的时间戳,但为了给出任何真正的建议,我需要知道您使用这些数据的目的。但是,如果您需要比3ms更高的分辨率,则需要查看SQL之外的内容。
DATETIME: 0.01 (3 ms)
QueryPerformanceCounter: 0.0000001 (100 ns)
DATETIME2: 0.0000001 (7 decimal places, 100 ns)发布于 2012-02-20 21:41:05
没有像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')))发布于 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
https://stackoverflow.com/questions/5080127
复制相似问题