You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SQL根据记录完成时间判定所属班次?求实现方案

问题解答

当前思路的问题

你写的case shift是错误的——shift是我们要计算生成的字段,不是数据表中已有的字段,正确逻辑应该基于complete_date的小时部分来判断所属班次。

最优实现方法

核心逻辑是提取complete_date的小时数,按班次时间范围匹配:

  • 6:00-14:00(6am到2pm)→ 1班
  • 14:00-22:00(2pm到10pm)→ 2班
  • 22:00-次日6:00(10pm到6am)→3班

不同数据库的时间函数语法略有差异,以下是主流数据库的实现:

MySQL/MariaDB

SELECT 
    order_num, 
    test_iteration, 
    complete_date,
    CASE
        WHEN HOUR(complete_date) BETWEEN 6 AND 13 THEN 1
        WHEN HOUR(complete_date) BETWEEN 14 AND 21 THEN 2
        ELSE 3
    END AS shift
FROM your_table;

PostgreSQL

SELECT 
    order_num, 
    test_iteration, 
    complete_date,
    CASE
        WHEN EXTRACT(HOUR FROM complete_date) BETWEEN 6 AND 13 THEN 1
        WHEN EXTRACT(HOUR FROM complete_date) BETWEEN 14 AND 21 THEN 2
        ELSE 3
    END AS shift
FROM your_table;

SQL Server

SELECT 
    order_num, 
    test_iteration, 
    complete_date,
    CASE
        WHEN DATEPART(HOUR, complete_date) BETWEEN 6 AND 13 THEN 1
        WHEN DATEPART(HOUR, complete_date) BETWEEN 14 AND 21 THEN 2
        ELSE 3
    END AS shift
FROM your_table;

为什么这是最优方案

  1. 性能高效:直接提取时间的小时部分做范围判断,计算逻辑简单,若complete_date字段有索引,还能进一步提升查询速度。
  2. 可读性强:逻辑清晰直观,后续维护容易理解。
  3. 兼容性好:基于标准时间函数,适配绝大多数主流数据库,仅需微调函数语法即可迁移。

内容的提问来源于stack exchange,提问作者Sa Rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 21:15:05