根据多个条件创建包含其他列的视图

时间:2016-03-29 20:36:48

标签: sql postgresql between

我一直在尝试从当前的工作中挑选出一些数据。我需要创建一个带有班次编号的附加列,该列取决于产品创建时间。该表如下所示:

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

现在我需要添加一个基于小时的班次编号的列 - 06:00:00 - 14:00:00班次1,14:00:00-22:00:00班次2和22: 00:00-06:00:00转移3.我对sql很新,我知道如何通过AS添加列,但我不知道如何使用正确的数据填充列基于时间戳的条件。我们通过pgadmin使用postgres数据库。我尝试了类似的东西:

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

但我对于如何将条件数据插入名为shift的新列中感到很遗憾。

1 个答案:

答案 0 :(得分:0)

您不应使用<input type="file" accept="image/*" capture="camera">比较时间戳值。要选择时间介于06:00和14:00之间的行,请将时间戳投放到LIKE并进行比较:

time

可以使用相同的“技巧”来创建班次列:

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

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; 运算符包含两个值,这就是为什么第二次检查在14:00之后1秒开始

between指定时间文字(常量)。有关如何指定时间(或时间戳)值的更多详细信息,请参阅手册:

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