根据多个条件创建带有附加列的视图

Creating view with additional column based on multiple condition

我一直在努力从我目前的工作中整理出一些数据。我需要创建额外的列,其班次编号取决于产品创建时间。 table 看起来像这样:

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 shift 3. 刚接触sql,我知道如何通过AS添加一列,但我不知道如何填充该列根据基于时间戳的条件使用正确的数据。我们通过 pgadmin.I 使用 postgres 数据库尝试了类似的东西:

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

但我不知道如何将条件数据插入名为 shifts 的新列。

您不应使用 LIKE 比较时间戳值。 select 时间在 06:00 和 14:00 之间的行将时间戳转换为 time 并比较:

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

相同的 "trick" 可用于创建移位列:

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;

between 运算符包括两个值,这就是第二次检查在 14:00

后 1 秒开始的原因

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

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