【问题标题】:How to convert AM PM to timestamp for timestampdiff in SQL?如何将 AM PM 转换为 SQL 中 timestampdiff 的时间戳?
【发布时间】:2021-10-09 13:45:39
【问题描述】:

我有一个生成的列,如果随着时间的推移不为空,则计算输入和超时的时间差。

ALTER TABLE tbl_dtr
  ADD COLUMN total_worked_hours FLOAT(2) AS (CASE 
                                                WHEN time_out = '' then 0
                                                WHEN over_time_out = '' then 0
                                                WHEN time_out <> '' then (TIMESTAMPDIFF(SECOND, time_in, time_out) / 3600)
                                                WHEN over_time_out <> '' then ((TIMESTAMPDIFF(SECOND, time_in, time_out) / 3600) + (TIMESTAMPDIFF(SECOND, over_time_in, over_time_out) / 3600))
                                             END);

这里的问题是total_worked_hours列会导致null,我不知道如何将AM/PM转换为时间戳来计算timestamdiff。

id date time_in time_out over_time_in over_time_out total_worked_hours
1 2021-08-04 08:35 AM 06:51 PM 07:05 PM 11:58 PM NULL

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。 FLOAT(2) 应该是什么?
  • FLOAT(2) 是一种 total_worked_hours 类型,每行都会产生浮点值

标签: sql phpmyadmin mariadb


【解决方案1】:

我的“快速而肮脏”的解决方案是:

SELECT     
CASE WHEN SUBSTRING('08:35 AM',7,2)= 'AM' 
THEN CONVERT(TIME,SUBSTRING('08:35 AM',1,5)) 
ELSE  DATEADD(HOUR,12,CONVERT(TIME,SUBSTRING('08:35 AM',1,5)) )  END as time

基本上

  • 使用格式“08:35 AM”为您的时间列添加子字符串
  • 测试是上午还是下午
  • 如果 AM >>>> CONVERT(TIME, Substringed value)
  • else >>> CONVERT(TIME, Substringed value) + 12 hours

现在您可以执行 DATEDIFF 操作了。

【讨论】:

  • 这显示错误 #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 2 行的“CASE WHEN SUBSTRING(time_in,7,2) = 'AM' THEN CONVERT(TIME,SUBSTRING(time_in...') 附近使用正确的语法
  • 我测试过,它可以在我的“ms sql server”上运行。 MariaDB 使用不同的 sinthax 添加日期...你应该用 DATE_ADD 替换 DATEADD
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
相关资源
最近更新 更多