如何将 DateTime 转换为精度大于 T-SQL 中天数的数字?
Posted
技术标签:
【中文标题】如何将 DateTime 转换为精度大于 T-SQL 中天数的数字?【英文标题】:How to convert DateTime to a number with a precision greater than days in T-SQL? 【发布时间】:2010-11-03 02:35:29 【问题描述】:以下两个查询转换为相同的数字
SELECT CONVERT(bigint,CONVERT(datetime,'2009-06-15 15:00:00'))
SELECT CAST(CONVERT(datetime,'2009-06-15 23:01:00') as bigint)
结果
39978
39978
仅当日期不同时,生成的数字才会不同。有什么方法可以将 DateTime 转换为更精确的数字,就像我们在 .NET 中使用 .Ticks 属性所做的那样?
我需要至少一分钟的精度。
【问题讨论】:
【参考方案1】:好吧,我会这样做:
select datediff(minute,'1990-1-1',datetime)
其中 '1990-1-1' 是任意基准日期时间。
【讨论】:
这个问题,在一分钟内运行不止一次,每次都给出相同的值。【参考方案2】:SELECT CAST(CONVERT(datetime,'2009-06-15 23:01:00') as float)
产量 39977.9590277778
【讨论】:
【参考方案3】:转换为浮点数或小数,而不是 int/bigint。
整数部分(小数点前)表示天数。小数点后是小数天数(即时间)。
【讨论】:
【参考方案4】:为此使用DateDiff
:
DateDiff (DatePart, @StartDate, @EndDate)
DatePart
从年下降到纳秒。
更多在这里..http://msdn.microsoft.com/en-us/library/ms189794.aspx
【讨论】:
【参考方案5】:您可以使用 T-SQL 在日期到达您的 .NET 程序之前对其进行转换。如果您不需要在 .NET 程序中进行额外的日期转换,这通常会更简单。
DECLARE @Date DATETIME = Getdate()
DECLARE @DateInt INT = CONVERT(VARCHAR(30), @Date, 112)
DECLARE @TimeInt INT = REPLACE(CONVERT(VARCHAR(30), @Date, 108), ':', '')
DECLARE @DateTimeInt BIGINT = CONVERT(VARCHAR(30), @Date, 112) + REPLACE(CONVERT(VARCHAR(30), @Date, 108), ':', '')
SELECT @Date as Date, @DateInt DateInt, @TimeInt TimeInt, @DateTimeInt DateTimeInt
Date DateInt TimeInt DateTimeInt
------------------------- ----------- ----------- --------------------
2013-01-07 15:08:21.680 20130107 150821 20130107150821
【讨论】:
【参考方案6】:DECLARE @baseTicks AS BIGINT;
SET @baseTicks = 599266080000000000; --# ticks up to 1900-01-01
DECLARE @ticksPerDay AS BIGINT;
SET @ticksPerDay = 864000000000;
SELECT CAST(@baseTicks + (@ticksPerDay * CAST(GETDATE() AS FLOAT)) AS BIGINT) AS currentDateTicks;
【讨论】:
这个解决方案对我来说是最优雅的。我在 SQL Server 2012 上【参考方案7】:如果这样做的目的是从 date
中创建一个独特的价值,我会这样做
DECLARE @ts TIMESTAMP
SET @ts = CAST(getdate() AS TIMESTAMP)
SELECT @ts
这会获取日期并将其声明为简单的时间戳
【讨论】:
这是一个 bigint 版本的相同【参考方案8】:这里有一个相同的 bigint 版本
DECLARE @ts BIGINT
SET @ts = CAST(CAST(getdate() AS TIMESTAMP) AS BIGINT)
SELECT @ts
【讨论】:
以上是关于如何将 DateTime 转换为精度大于 T-SQL 中天数的数字?的主要内容,如果未能解决你的问题,请参考以下文章
琐事:如何将 JSON2.org DateTime 字符串转换为 C# DateTime