Mysql计算包含文本的同一字段中的时间戳之间的时差?

时间:2019-06-25 14:35:01

标签: mysql timestamp

是否可以根据包含文本的同一字段中的时间戳计算时差?这是我的用餐日期:

 ID, FIELD1, totalTime
 '1', '2018-06-03 09h56##firstname.lastname##2018-06-03 16h45##firstname.lastname', ''
 '2', '2018-02-06 17h24##firstname.lastname##2018-02-06 21h03##firstname.lastname', ''
 '3', '2018-01-01 02h23##firstname.lastname##2018-01-01 17h24##firstname.lastname', ''

所以我需要计算每行的时间:例如:(2018-02-03 16h45)-(2018-02-03 09h56)

我的SQL知识还不错,但是我无法弄清楚如何在同一领域做这样的事情。

谢谢

伊丽莎白

1 个答案:

答案 0 :(得分:0)

我会使用主力函数SUBSTRING_INDEXSTR_TO_DATETIMESTAMPDIFF函数可以计算DATETIME值之间的差。

(我将跳过有关不在一个大文本列中存储多个日期时间和字符串的讨论。可以说这是SQL反模式,并且是错误的做法。)

SQL中的字符串处理非常糟糕(SQL很快变丑),但是我们可以处理一些基本的,定义明确的操作。

因为在列值中有常规定界符##,所以如果有保证,我们可以利用SUBSTRING_INDEX函数提取这些定界符之间的部分。

作为演示:

SELECT -- extract string parts
       SUBSTRING_INDEX(t.field1,'##',1)                                                          AS d1_str
     , SUBSTRING_INDEX(SUBSTRING_INDEX(t.field1,'##',3),'##',-1)                                 AS d2_str

       -- convert stringparts to DATETIME
     , STR_TO_DATE( SUBSTRING_INDEX(t.field1,'##',1)                          ,'%Y-%m-%d %Hh%i') AS d1_dt
     , STR_TO_DATE( SUBSTRING_INDEX(SUBSTRING_INDEX(t.field1,'##',3),'##',-1) ,'%Y-%m-%d %Hh%i') AS d2_dt

       -- calculate time difference (in minutes) of the DATETIME
     , TIMESTAMPDIFF(MINUTE
                    , STR_TO_DATE( SUBSTRING_INDEX(t.field1,'##',1) , '%Y-%m-%d %Hh%i') 
                    , STR_TO_DATE( SUBSTRING_INDEX(SUBSTRING_INDEX(t.field1,'##',3),'##',-1) , '%Y-%m-%d %Hh%i') 
       ) AS diff_minutes

  FROM ( SELECT  '1'+0 AS id, '2018-06-03 09h56##firstname.lastname##2018-06-03 16h45##firstname.lastname' AS field1
          UNION ALL SELECT '2'+0, '2018-02-06 17h24##firstname.lastname##2018-02-06 21h03##firstname.lastname'
          UNION ALL SELECT '3'+0, '2018-01-01 02h23##firstname.lastname##2018-01-01 17h24##firstname.lastname'
       ) t

返回:

d1_str            d2_str            d1_dt                d2_dt                diff_minutes
----------------  ----------------  -------------------  -------------------  ------------
2018-06-03 09h56  2018-06-03 16h45  2018-06-03 09:56:00  2018-06-03 16:45:00           409
2018-02-06 17h24  2018-02-06 21h03  2018-02-06 17:24:00  2018-02-06 21:03:00           219
2018-01-01 02h23  2018-01-01 17h24  2018-01-01 02:23:00  2018-01-01 17:24:00           901
相关问题