2017-03-02 6 views
0

今日の固定時間に列の日付を連結しようとしていますが、CASTはすべてDATETIMEとなります。日付と時刻を連結したDATETIMEをキャスト

固定時間は午前5時30分です。

私が使用している日付欄には、調整が必要です終了何かが実行された日時。私は開始日時を使用したいと思います。

開始日時は独自の列として使用できませんが、処理時間が秒単位である別の列があるため、DATEADDを使用して終了日時を開始日にロールバックできます/時間。

ここで完全な声明だ:

CAST(CONVERT(VARCHAR(10), DATEADD(ss,-ConfTask.[LastExecutedDuration], ConfTask.[LastExecutedDate]), 103) + ' ' + '05:30' as DATETIME)

ここで私が受けていたエラーメッセージです:

をdatetimeデータ型にvarcharデータ型の変換を行うに を結果は範囲値になります。

私は問題を調査するためにこれらのステートメントをテストしようとしましたが、それらはすべてが自分でOKを実行します。

CAST(CONVERT(VARCHAR(10), GETDATE(), 103) + ' ' + '05:30' as DATETIME)

CAST('2017-03-02' + ' ' + '05:30' as DATETIME)

DATEADD(ss,-ConfTask.[LastExecutedDuration], ConfTask.[LastExecutedDate])

私はこの問題を回避する方法については固執しています。どんな助けでも大歓迎です。

+0

'ConfTask。[LastExecutedDuration]'は 'TIME'、' INT'、 'NUMERIC()'の値として保存されています。 ? – 3BK

+0

'Decimal(18、0)'として保存されています –

+0

これは特定の形式 '(103)'に変換されているという事実に接続できません。あなたの例では、 'GETDATE()'を '(103)'に変換しましたが、 'ConfTask。[LastExecutedDate])'に変換しなかったからです。あなたは '(101)'のような別の日付書式で実行しようとしましたか、あるいは特定の形式をまったく提供していませんか? (うまくいけば愚かな質問ではない...) – 3BK

答えて

0

これは働いていた:

CONVERT(DATETIME, CONVERT(CHAR(8), DATEADD(ss,-ConfTask.[LastExecutedDuration], ConfTask.[LastExecutedDate]), 112)) + ' ' + CONVERT(CHAR(8), '05:30:00', 108)

1

明らかに、予期しない値が列に含まれている必要があります。

私はこのようなクエリを使用してそれらを見つけることを示唆している:あなたはまた、単に使用して日付関数により、ロジックを簡素化することができます

SELECT LastExecutedDuration, LastExecutedDate 
FROM ConfTask 
WHERE TRY_CONVERT(datetime, 
        CONVERT(VARCHAR(10), 
          DATEADD(second, 
            -ConfTask.[LastExecutedDuration], 
            ConfTask.[LastExecutedDate] 
           ) 
          103 
         ) + ' ' + '05:30') 
       ) 

select dateadd(minute, 
       5 * 60 + 30, 
       convert(datetime, 
         convert(date, 
           dateadd(second, 
             - ConfTask.LastExecutedDuration 
             ConfTask.LastExecutedDate 
            ) 
          ) 
        ) 
      ) 
+0

ああ、私が使っていたコラムにはいくつかのヌルがありました。ありがとう、これは私が問題を追跡するのを助けた。 –

+0

私は少し急いでいました...nullを処理するとエラーは取り除かれましたが、正しい日付/時刻形式が返されませんでした。 –

関連する問題