如何将 AM PM 转换为 SQL 中 timestampdiff 的时间戳?

Posted

技术标签:

【中文标题】如何将 AM PM 转换为 SQL 中 timestampdiff 的时间戳?【英文标题】:How to convert AM PM to timestamp for timestampdiff in SQL? 【发布时间】: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 类型,每行都会产生浮点值 【参考方案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

以上是关于如何将 AM PM 转换为 SQL 中 timestampdiff 的时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

将 Time DataType 转换为 AM PM 格式:

将 mysql TIME 从 24 HR 转换为 AM/PM 格式

SQL - 将 varchar (dd/mm/yyyy hh.mm AM/PM) 转换为日期时间

如何将日期/时间从 24 小时格式转换为 12 小时 AM/PM? [复制]

将 AM PM 时间字符串存储到 MySQL 中的 TIME 数据类型中,并在显示时使用 AM PM 检索?

当用户的设备在 iOS 中设置为 24 小时制时,如何将包含“am/pm”的字符串转换为 NSDate?