6

これを Teradata で動作させたい:

より良い例のために更新された SQL

select
case
    when 
        current_date between
        cast('03-10-2013' as date format 'mm-dd-yyyy') and
        cast('11-03-2013' as date format 'mm-dd-yyyy')
    then 4
    else 5
end Offset,
(current_timestamp + interval Offset hour) GMT

ただし、エラーが発生しますExpected something like a string or a Unicode character blah blah。次のように間隔をハードコーディングする必要があるようです。

select current_timestamp + interval '4' day

はい、最初の例でハードコーディングしたことは知っていますが、それは計算結果を示すためだけのものでした。

知っておく必要がある場合は、いくつかのテーブルのすべての日付と時刻を GMT に変換する必要がありますが、夏時間も考慮する必要があります。私は東部にいるので、日付が DST 時間枠内にある場合は 4 時間を追加し、それ以外の場合は 5 時間を追加する必要があります。

期間ごとに個別の更新ステートメントを作成し、それに応じて値を 4 から 5 に変更できることはわかっていますが、クエリを動的かつスマートにしたいと考えています。

4

3 に答える 3

0

2 つの注意事項:

  • INT の代わりに INTERVAL を返すことができます
  • Teradata で日付リテラルを記述する推奨される方法は、CAST/FORMAT ではなく DATE 'YYYY-MM-DD' です。

    select
        case
            when current_date between DATE '2013-03-10' and DATE '2013-11-03'
            then interval '4' hour
            else interval '5'hour
        end AS Offset,
        current_timestamp + Offset AS GMT
    
于 2013-06-27T12:23:56.143 に答える