【发布时间】:2019-05-20 00:33:48
【问题描述】:
我在获取 sql server 中两个时间列之间的分钟差时遇到了问题。
Column1: Starttime
Column2: Endtime
这两个是 nchar(10) 类型,我通过以下方式将它们转换为时间格式并使用 datediff 函数。
如果这两列具有 AM 格式或 PM 格式,那么分钟差就可以了。但是,如果我的开始时间是 PM 格式,而结束时间是 AM(SQL 将其作为第二天)格式,那么我得到的分钟数比预期的要负数。
select
dty_act_start_time,
dty_act_end_time,
datediff(minute, convert(varchar,dty_act_start_time,114),convert(varchar,dty_act_end_time,114))
from DB.Mydatabase;
请告诉我如何在分钟内得到正确的差异。
【问题讨论】:
-
那些不是时间列,它们是内容未知的字符串。没有什么能确保这些字段实际上包含英文风格的 AM/PM 时间字符串。如果要存储时间,请使用 正确 类型,即
time或datetime等。 -
除非您提供样本数据和期望的结果,否则我们只能猜测。
-
I converted them into time format. 这显然是错误的。您将它们从一种字符串类型转换为另一种字符串类型。 SQL 数据库有 datetime 和 time 类型是有原因的。
标签: sql sql-server tsql datetime time