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
我被授予访问遗留数据库的权限,以便进行一些统计工作。
到目前为止我已经得到了我需要的一切,除了我试图计算时间距离,使用 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