如何将 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

如何将 SQL 日期转换为 DateTime?

如何将 numpy datetime64 转换为 datetime [重复]

如何将 DateTime 转换为 VarChar

如何将 datetime 对象的时间转换为整数?

如何将 DateTime 转换为字符串 [重复]