根据多个条件创建带有附加列的视图
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
我一直在努力从我目前的工作中整理出一些数据。我需要创建额外的列,其班次编号取决于产品创建时间。 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
time '06:00:00'
指定时间文字(常量)。有关如何指定时间(或时间戳)值的更多详细信息,请参阅手册:
http://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT