MySql - 使用 1 列中的 2 个值计算时间距离(糟糕的设计解决方法)

MySql - Calculating distance in time using 2 values from 1 column (Poor design workaround)

我被授予访问遗留数据库的权限,以便进行一些统计工作。

到目前为止我已经得到了我需要的一切,除了我试图计算时间距离,使用 5 个值,存储在 4 列 (ARGGGHHH)

以上是数据库的一部分。

如您所见,我有开始和结束的日期和时间。 我想计算从 str_date + str_time 到 stp_date + stp_time

的时间距离

我遇到的问题是,根据 stp_time.

中的 第二个值 ,计算应该有所不同

IFF 第二个值 = "DUR"...那么在这种情况下我可以只取第一个值“01:04:51”

IFF 第二个值 = 其他任何值。 stp_time 表示 时间码 而不是持续时间。然后必须计算 stp_time - str_time(如果日期不同则计算日期)

所有数据均为 24 小时格式。我已经完成了条件聚合的工作,但我还没有想出这个,而且我以前从未使用过像这样格式错误的列。

欢迎提出任何建议。

感谢阅读

试试看,您可能需要子查询的 where 条件 与左右:

SELECT IF(dur,stp,timediff(str,stp)) FROM(
SELECT STR_TO_DATE(CONCAT(str_date," ",LEFT(str_time,8)), 'd%/%b/%Y %H:%i:%s') as str,
       STR_TO_DATE(CONCAT(stp_date," ",LEFT(stp_time,8)), 'd%/%b/%Y %H:%i:%s') as stp,
       if(RIGHT(stp_time,3)="DUR",1,0) as dur
FROM my_table
) AS times
SELECT
    CASE WHEN RIGHT(stp_time,3)="DUR"
        THEN
            TIMEDIFF(LEFT(stp_time,8), '00:00:00')
        ELSE
            TIMEDIFF(
                STR_TO_DATE(CONCAT(stp_date," ",LEFT(stp_time,8)), '%d/%b/%Y %H:%i:%s'),
                STR_TO_DATE(CONCAT(str_date," ",LEFT(str_time,8)), '%d/%b/%Y %H:%i:%s')
                )
    END AS diff
FROM so33289063