sql - 根据多个条件创建带有附加列的 View

标签 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 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/

相关文章:

sql - SQL Server:使用TOP 1的LEFT OUTER JOIN最多选择一行

mysql - 返回按同一列上的总匹配项排序的结果

postgresql - 从数据工厂读取 Postgress(以 SQL_ASCII 编码)

javascript - 两个值之间的结果数组 - javascript

sql - 将 IF EXIST(SELECT 1 FROM ) 更改为 IF EXIST(SELECT TOP 1 FROM ) 是否有任何副作用?

Postgresql/Timescaledb 错误 : Deprecated trigger function should not be invoked

python - Django TemplateSyntaxError : current transaction is aborted, 这个异常是什么意思? postgresql 8.4 可以在 django 上正常工作吗?

mysql - SQL 中的 BETWEEN 不包含

linux - Bash 生成正数和负数之间的随机数

mysql - SQL extra 只有一天而不是整个日期