2016-03-29 1 views
1

私は現在の仕事からいくつかのデータを整理しようとしています。製品の作成時間に応じてシフト番号を追加して列を作成する必要があります。テーブルには、次のようになります。複数の条件に基づいて追加の列を含むビューを作成

product_id creation_time   warehouse_name 
    varchar  timestamp    varchar 
    1  2016-03-29 08:30:45   11 
    2  2016-03-15 14:15:10   9 
    3  2016-03-14 05:40:45   11 

は今、私は時間に基づいているシフト数と列を追加する必要があります - 6時00分○○秒 - 14時00分00秒シフト1、14:00:00- 22:00:00シフト2と22:00:00-06:00:00シフト3. SQLに関してはかなり新しいですが、AS経由でカラムを追加する方法は分かりますが、タイムスタンプに基づいた条件に基づいて正しいデータを列に入力します。

SELECT creation_time, product_id, warehouse_name 
FROM products WHERE creation_time BETWEEN LIKE '%06:00:00' AND '%14:00:00'; 

が、私はシフトという名前の新しい列に条件データを挿入する方法で迷ってしまいました。私たちはpgadmin.Iのようなものを試してみました介して、Postgresデータベースを使用しています。

答えて

0

LIKEを使用してタイムスタンプ値を比較しないでください。 6:00から14:00の間の時間を持つ行をtimeにタイムスタンプをキャスト選択し、その比較するには:

SELECT creation_time, product_id, warehouse_name, 
     case 
     when creation_time::time between time '06:00:00' AND time '14:00:00' then 1 
     when creation_time::time BETWEEN time '14:00:01' AND time '22:00:00' then 2 
     else 3 
     end as shift_number 
FROM products; 

SELECT creation_time, product_id, warehouse_name 
FROM products 
WHERE creation_time::time BETWEEN time '06:00:00' AND time '14:00:00'; 

同じ「トリック」はシフト列を作成するために使用することができます between

オペレータは、第2のチェック14:00

time '06:00:00'は時間リテラル(定数)を指定した後、1秒を開始した理由だと両方の値を含みます。

http://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT

+0

はどうもありがとうございました:時間(またはタイムスタンプ)の値を指定する方法の詳細については、マニュアルを参照してください!私はタイムスタンプをキャストすることを忘れていました...とにかくあなたの答えは私の問題を解決します。再度、感謝します。 – deimos0

関連する問題