2009-06-15 57 views
13

下面兩個查詢轉換爲相同數量如何將DateTime轉換爲T-SQL中精度大於天數的數字?

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屬性一樣?

我需要至少一分鐘的精度。

回答

22

嗯,我會做這樣的:

select datediff(minute,'1990-1-1',datetime) 

其中「1990年1月1日」是一個任意基地日期時間。

7
SELECT CAST(CONVERT(datetime,'2009-06-15 23:01:00') as float) 

產生39977.9590277778

0

CAST到浮子或小數,而不是一個int/BIGINT。

整數部分(小數點前)表示整天的數量。小數點後是分數天(即時間)。

0

您可以使用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 
2
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; 
+0

這個解決方案對我來說是最優雅的。我在SQL Server 2012 – 2014-02-08 04:31:38

1

如果這樣做的目的是爲了創建一個從date獨特的價值,這裏是我會做什麼

DECLARE @ts TIMESTAMP 
SET @ts = CAST(getdate() AS TIMESTAMP) 
SELECT @ts 

這得到的日期,並聲明它作爲一個簡單的時間戳

+0

這裏是一個bigint版本相同 – Stan 2015-07-31 15:40:02

0

和h ere是同一個bigint版本

DECLARE @ts BIGINT 
SET @ts = CAST(CAST(getdate() AS TIMESTAMP) AS BIGINT) 
SELECT @ts 
相關問題