0

このような日時列から時間だけの文字列表現を取得するための多くの情報を見つけることができました。

別の日時に追加するような計算を行うことができるように、日時の部分を取得する必要があります。したがって、時間の文字列表現は役に立ちません。

ただし、時間を数値型の値として抽出するは1つしか見つかりませんでした。すなわち:

SELECT CAST(GETDATE() AS FLOAT) - FLOOR(CAST(GETDATE() AS FLOAT))

ただし、このメソッドには2 つのキャストが必要であり、これを 10,000 行以上で実行する必要があります。dateadd日時列から日付部分を抽出する方法に似たものはありますか:

select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

datetime 列から時刻だけを取得し、それを 10 進数または datetime として返すために使用できますか? おそらく、より少ないキャストを使用するソリューションでしょうか?

SQL Server 2000 を使用しています。

4

2 に答える 2

1

取得するにはdatetime

SELECT GetDate() - DateDiff(day, 0, GetDate());
-- returns the time with zero as the datetime part (1900-01-01).

そして、時間を表す数値を取得するには:

SELECT DateDiff(millisecond, DateDiff(day, 0, GetDate()), GetDate());
-- time since midnight in milliseconds, use as you wish

本当に文字列が必要な場合は、次のようにします。

SELECT Convert(varchar(8), GetDate(), 108); -- 'hh:mm:ss'
SELECT Convert(varchar(12), GetDate(), 114); -- 'hh:mm:ss.nnn' where nnn is milliseconds
于 2012-08-17T21:07:59.243 に答える
1

時間を秒単位で取得できる1つの方法は次のとおりです。

select cast(datediff(second, DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0), getdate())/(60*60*24.0) as datetime)

これは時間を秒単位で計算し、日時に変換します。

小数として取得するには:

select datediff(second, DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0), getdate())/(60*60*24.0)

または、ミリ秒の精度を好む場合は「ms」を使用します。

または、より読みやすいものを使用できます。

select datepart(hh, getdate())/24.0+datepart(mm, getdate())/(24*60.0)+
       datepart(ss, getdate())/(24*60*60.0)
于 2012-08-17T21:01:42.463 に答える