2

SQLのDateDiff関数を使用するクエリがあります.間隔は、私がそれをどのように置くかに応じて、分、時間、または日を返します. 結果の整数型ではなく、Datetime データ型を返したいと思います。次のようにキャストしてみました。

 DATEDIFF(cast(MIN as datetime), b.FollowUpTime, a.FollowUpTime) 

これはエラーを返します。私も試しました

DATEDIFF(Convert(datetime,convert(char(8),MiNUTE)), b.FollowUpTime, a.FollowUpTime)

また、間違ったパラメーター エラーを返します。助けていただければ幸いです。ありがとう

4

2 に答える 2

1

これを使用して、2 つの日付の差を見つけることができます。

SELECT 
    convert(VARCHAR, abs(datediff(second, @date1, @date2) / 60 / 60 / 24)) 
    + ':' + 
    convert(VARCHAR, abs(((datediff(second, @date1, @date2) / 60) / 60) % 24)) 
    + ':' + 
    convert(VARCHAR, abs((datediff(second, @date1, @date2) / 60) % 60)) 
    + ':' + 
    convert(VARCHAR, abs((datediff(second, @date1, @date2) % 60)))

@date1@date2を必要な日付に変更するだけです。

これは、これをテストできる SQLFiddle です

本当に datetime に変換したい場合は、これを使用してください:

SELECT 
    convert(DATETIME, 
        (convert(VARCHAR, abs(((datediff(second, @date1, @date2) / 60) / 60) % 24)) 
         + ':' + 
        convert(VARCHAR, abs((datediff(second, @date1, @date2) / 60) % 60)) 
         + ':' + 
        convert(VARCHAR, abs((datediff(second, @date1, @date2) % 60)))
           ) 
   + dateadd(day, 
             abs(datediff(second, @date1, @date2) / 60 / 60 / 24), 
             '01-01-1900 00:00:00')
             )

2 番目のクエリのSQLFiddle を次に示します。

于 2013-08-21T11:18:48.150 に答える
0

コメントで指摘されているように、両方の日付の差の値をDATEDIFF返します。INT

DATETIMEは 1900-01-01 が「基準日」であることに基づいているため、a に 0 を代入すると値 1900-01-01 が得られることを意味するためDATETIME、それに日付の差を追加して、その時点に対する相対的な値を取得できます ( 1900-01-01)。

次に例を示します。

DECLARE @date1 DATETIME = GETUTCDATE()
DECLARE @date2 DATETIME = DATEADD(DAY, -1, GETUTCDATE())

DECLARE @zeroDate DATETIME = 0

SELECT DATEADD(SECOND, DATEDIFF(SECOND, @date1, @date2), @zeroDate)

また、それを試すことができるSQLFiddleをセットアップしました。

于 2013-08-21T11:18:47.760 に答える