木子屋 Dnawo's BLOG

SQL Server标量值函数:datetime转为tick

👤 dnawo 📅 2014-05-25 👁 6569 👍 0 💬 0 🔄 本站原创
create function getTicks(@time datetime) returns bigint
as
begin
	declare @mintime datetime, @today datetime
	declare @days bigint, @milliseconds bigint
	declare @ticks bigint

	select @mintime='1753-01-01', @today=dateadd(day,datediff(day,0,@time),0)
	--0001-01-01和1753-01-01相差639905天
	select @days=datediff(day,@mintime,@today)+639905, @milliseconds=datediff(millisecond,@today,@time)
	select @ticks=(@days*24*60*60*1000 + @milliseconds)*10000

	return @ticks
end
go

常见问题

问:为什么不直接用datediff(millisecond,'0001-01-01',@time)*10000得到tick值?
答:原因有两点,一是dateime类型日期范围为1753年1月1日到9999年12月31日,二是datediff函数,datepart为millisecond时,两个参数的最大差值为24天20小时31分钟23.647秒。

问:为什么dateime类型日期范围最小为1753年1月1日?
答:参阅http://www.mzwu.com/article.asp?id=3787

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 sql使用datediff函数得到错误结果一例 下一篇 → SQL Server触发器判断当前操作类型(insert/upd…