2016-05-25 5 views
0
select TO_CHAR(date1,'HH24:MI:SS') time_in, 
CASE 
    WHEN TO_CHAR(date1,'HH24:MI:SS') between '6:00:00' AND '18:00:00' then 'day_shift' 
    WHEN TO_CHAR(date1,'HH24:MI:SS') BETWEEN '18:00:00' AND '24:00:00' then 'night_shift' 
    WHEN TO_CHAR(date1,'HH24:MI:SS') BETWEEN '0:00:00' AND '6:00:00' then 'night_shift' 
    END AS shift 
from blah 

タイムスタンプに基づいてどのようなシフトが発生するのかを確認しようとしています.SQLデベロッパーの表から取得しています。任意の提案や助け?oracle sqlデベロッパーのタイムスタンプのパラメータ

+0

'between'は両端を含みます。最初のバケットに18:00:00を入れて、18:00:01に2番目のバケットを開始するか、または最初のバケットが実際に17:59:59に終了するかを確認しますか?実際には列は日付かタイムスタンプですか? –

+0

は、「00:00:00」と「06:00:00」の夜間シフトから前の日の夜間シフトを表すように6時間を引く方法がありますか? –

+0

あなたはおそらく[このようなものが]必要です(http://stackoverflow.com/q/31269273/266304)。 –

答えて

1

HH24は、ゼロパッド時間を作成します。あなたは試してみてください:between以来

select TO_CHAR(date1,'HH24:MI:SS') time_in, 
     (CASE WHEN TO_CHAR(date1,'HH24:MI:SS') between '06:00:00' AND '18:00:00' 
      THEN 'day_shift' 
      WHEN TO_CHAR(date1,'HH24:MI:SS') BETWEEN '18:00:00' AND '24:00:00'   
      THEN 'night_shift' 
      WHEN TO_CHAR(date1,'HH24:MI:SS') BETWEEN '00:00:00' AND '06:00:00'   
      THEN 'night_shift' 
     END) AS shift 
from blah 
+0

ありがとうございました! –

+0

は、'00:00:00 'と'06:00:00'の夜間シフトから前の日の夜間シフトを表すように6時間を引く方法がありますか? –

+0

@ james_weasel。 。 。別の質問をする必要があります。 –

0

が含まれており、クエリは、現在、第一及び第三の両方の最初の2 when節では午後06時00分00秒、そして午前6時00分00秒を一致させようとします。とにかく最初の試合では止まるだろうが、2つの節で同じ価値を持つことは、あなたが何を期待しているのか、あるいは起こりたいのか不明確にする。また、うるう秒でさえ、 '24:00:00'の値を取得することはありません。

ですから、少しのことを簡素化することができます:

select to_char(date1,'HH24:MI:SS') time_in, 
    case when to_char(date1,'HH24:MI:SS') between '06:00:00' and '18:00:00' 
    then 'day_shift' 
    else 'night_shift' 
    end as shift 
from blah; 

それはあなたの範囲のあなたの両端は、おそらくあなたが必要なものを超えて1秒ですを表示されます。最初の範囲は本当に唯一早く 18時より終了する必要がある場合は、それは次のようになります。

select to_char(date1,'HH24:MI:SS') time_in, 
    case when to_char(date1,'HH24:MI:SS') between '06:00:00' and '17:59:59' 
    then 'day_shift' 
    else 'night_shift' 
    end as shift 
from blah; 

あなただけは本当に、その場合には時間を見てますが - あなたはまだフルタイムを持っていることを好むかもしれませんあなたが何を見ているのかを明白にする。そしてdateは、あなたも行うことができ、タイムスタンプである場合:

select to_char(date1,'HH24:MI:SS') time_in, 
    case when extract(hour from date1) between 6 and 17 
    then 'day_shift' 
    else 'night_shift' 
    end as shift 
from blah; 

そして、それはあなたが投げたが、あれば、それは努力の価値ではないかもしれないという日はないあなたはまだやることができ、タイムスタンプである場合:

select to_char(date1,'HH24:MI:SS') time_in, 
    case when extract(hour from cast(date1 as timestamp)) between 6 and 17 
    then 'day_shift' 
    else 'night_shift' 
    end as shift 
from blah; 
+0

は、「00:00:00」と「06:00:00」の夜間シフトから前の日の夜間シフトを表すように6時間を引く方法がありますか? –

+0

もちろん、あなたの質問はその日を無視していますので、どのように動作させたいのかよく分かりません。基本的に 'date1 - 6/24'だけです。これは' trunc(date1 - 6/24) 'としてグループ化することができます。あなたが本当に必要なものに依存します。 where句でそれを使用したい場合は、可変日付を調整する方が良いでしょう。 –

関連する問題