が含まれており、クエリは、現在、第一及び第三の両方の最初の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;
'between'は両端を含みます。最初のバケットに18:00:00を入れて、18:00:01に2番目のバケットを開始するか、または最初のバケットが実際に17:59:59に終了するかを確認しますか?実際には列は日付かタイムスタンプですか? –
は、「00:00:00」と「06:00:00」の夜間シフトから前の日の夜間シフトを表すように6時間を引く方法がありますか? –
あなたはおそらく[このようなものが]必要です(http://stackoverflow.com/q/31269273/266304)。 –