我一直在尝试从我目前的工作中整理出一些数据。我需要创建额外的列,其类次编号取决于产品创建时间。该表如下所示:
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 使用 postgres 数据库。我试过类似的东西:
SELECT creation_time, product_id, warehouse_name
FROM products WHERE creation_time BETWEEN LIKE '%06:00:00' AND '%14:00:00';
但我不知道如何将条件数据插入名为 shifts 的新列。
最佳答案
您不应使用 LIKE
比较时间戳值。要选择时间介于 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';
可以使用相同的“技巧”来创建移位列:
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
关于sql - 根据多个条件创建带有附加列的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36294617/