web-dev-qa-db-ja.com

T-SQLでDateTimeを日よりも高い精度の数値に変換する方法は?

以下の両方のクエリは同じ数に変換されます

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

生成される数値は、日が異なる場合にのみ異なります。 .NETで.Ticksプロパティを使用して行うように、DateTimeをより正確な数値に変換する方法はありますか?

少なくとも1分の精度が必要です。

13
Jader Dias

まあ、私はこのようにします:

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

ここで、「1990-1-1」は任意のベース日時です。

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

収量39977.9590277778

8
RedFilter

これの目的がdateから一意の値を作成することである場合、これが私がすることです

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

これは日付を取得し、単純なタイムスタンプとして宣言します

2
Stan
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;
2
JeffM

そして、これは同じのbigintバージョンです

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

これにはDateDiffを使用します。

DateDiff (DatePart, @StartDate, @EndDate)

DatePartは、年からナノ秒になります。

詳細はこちら。 http://msdn.Microsoft.com/en-us/library/ms189794.aspx

1
Raj More

Int/bigintの代わりにfloatまたはdecimalにキャストします。

整数部分(小数点の前)は、日数を表します。小数の後は小数日(つまり、時間)です。

0
richardtallent

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
0
user1956147