web-dev-qa-db-ja.com

日付のミリ秒を省略する

SQL Serverから選択した場合、日付を取得したいのですが、ミリ秒の値を省略し、日付タイプにしたいと思います。したがって、値1/1/2009 1:23:11.923、ミリ秒は省略したいが日付タイプは保持したいので、値は1/1/2009 1:23:11.000(日付でミリ秒の値を省略できないことを知っています。ゼロにしたいだけです)。

SQL Serverにこれを行う関数はありますか?それとも、独自の関数を作成する必要がありますか?繰り返しますが、varcharタイプではなく、datetimeタイプにしたいと思います。

27
Brian Mains

文字列変換を使用したくない場合は、次の解決策があります。

DECLARE @TheDate datetime, @Today datetime
SET @TheDate = GetDate()

SET @Today = DateAdd(dd, DateDiff(dd, 0, @TheDate), 0)
SELECT DateAdd(s, DateDiff(s, @Today, @TheDate), @Today)
9
Amy B

使用する DATETIME2、小数精度をサポートするSQL Server 2008の新しいデータ型:

SELECT
  CONVERT(DATETIME2(0),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss]
, CONVERT(DATETIME2(1),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.f]
, CONVERT(DATETIME2(2),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.ff]
, CONVERT(DATETIME2(3),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.fff]
, CONVERT(DATETIME2(4),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.ffff]
, CONVERT(DATETIME2(5),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.fffff]
, CONVERT(DATETIME2(6),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.ffffff]
, CONVERT(DATETIME2(7),SYSDATETIME()) [yyyy-mm-dd hh:mm:ss.fffffff]

変換は最も近い単位に丸められます。例:

2014-09-04 09:35:47.0162993 as DATETIME2(4) -> 
2014-09-04 09:35:47.0163

または、SQL 2005以降の場合:

SELECT
  original  = GETDATE()
, [floor]   = DATEADD(ms,-DATEPART(ms,GETDATE()),GETDATE())
, [ceiling] = DATEADD(ms,1000-DATEPART(ms,GETDATE()),GETDATE())
, [rounded] = DATEADD(ms,CASE WHEN DATEPART(ms,GETDATE()) < 500 THEN 0 ELSE 1000 END-DATEPART(ms,GETDATE()),GETDATE())

これは、文字列表現との間の変換よりも少し高速です。

52
Peter Radocchia

使用する:

SELECT CONVERT(DATETIME, CONVERT(VARCHAR(19), GETDATE(), 120))

この:

CONVERT(VARCHAR(19), GETDATE(), 120)

...ミリ秒を省略し、VARCHARを返します。したがって、目的のデータ型を処理するために、それをDATETIMEにキャスト/変換します。

使用できるさまざまな日付/時刻形式のリストについては、このリンク を参照してください。

11
OMG Ponies

これを試して

 declare @DATE datetime
 select @DATE = '1/1/2009 1:23:11.923'



 SELECT convert(datetime,CONVERT(char(35),@DATE,120))

または日付関数のみ

DECLARE @DATE DATETIME
SELECT @DATE = '1/1/2009 1:23:11.923'

SELECT DATEADD(SECOND, DATEDIFF(SECOND, 39000, @DATE), 39000)
6
SQLMenace
SELECT  GETDATE(),
        CONVERT(DATETIME, CONVERT(VARCHAR(MAX), GETDATE(), 120), 120)
4
Quassnoi

日付からミリ秒を減算します。 (または、ミリ秒の負の値を追加します)

SELECT DATEADD(ms, -DATEPART(ms, GETDATE()), GETDATE()) 

From SQL Serverはdatetimeからミリ秒を削除します

3
Lijo
DATEADD(SECOND, DATEDIFF(SECOND, 0, < your datetime column >), 0)

オーバーフローエラーを防ぐために、0を別のものに変更する必要がある場合があります。現在、確認するSQL Serverを用意していません。

このメソッドは一見すると直観的に見えるようには見えませんが、その背後にある理論的根拠をここで見てください: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes =

2
Frank Kalis