两次之间的时间差(分钟)
Posted
技术标签:
【中文标题】两次之间的时间差(分钟)【英文标题】:Time difference in minutes between two times 【发布时间】:2014-05-16 14:33:51 【问题描述】:一直在努力获得 2 次之间的分钟差。一次来自 SQL Server 中数据类型 TIME 的字段。另一个值是添加到 SQL 查询的字符串。我在 s-s-rS 2008 R2 中运行它看起来像这样:
DATEDIFF(mi, CONVERT(TIME, '23:59:59'), _Travel.Start_Time) AS TIME_DIFFERENCE
我收到错误:从字符串转换日期和/或时间时转换失败
我尝试将“23:59:59”转换为 TIME 类型“AS TIME”,但出现类似错误。我试过声明一个变量,但 s-s-rS 不允许它。我尝试的一切都给出了类似的错误。时间 23:59:59 将始终相同,但 _Travel.Start_Time 将是 DB 中该字段中的任何内容。 _Travel.Start_Time 的输出格式为 00:00:00
有什么想法可以在 23:59:59 和 db 值之间以分钟为单位获得差异吗? 塔
添加:
不敢相信。 _Travel.Start_Time 是 VARCHAR 而不是 TIME。已经试过了
DATEDIFF(CONVERT(TIME, '23:59:59'), CONVERT(TIME, _Travel.Start_Time))
但仍然出现同样的错误。但是,已经注意到 _Travel.Start_Time 字段中有 nulls/empty 字段
【问题讨论】:
在我的机器上工作.. 也运行 2008 R2。我在 SSMS 中执行了查询。您确定 _Travel.Start_Time 是 TIME 数据类型吗? 有点不相关,但使用字符串时要小心:'23:59:59'
。我看到人们像这样使用它:WHERE column > '2014-05-16' and column <= '2014-05-16 23:59:59'
请记住,您的时间可以大于23:59:59
,但小于第二天,因为允许使用小数值,请考虑:'23:59:59.5
您的查询可能会出现这一行。我总是使用WHERE column > '2014-05-16' and column < '2014-05-17'
。我发现将 1 天添加到结束日期并使用少于并忘记整个时间问题更容易。如果必须使用它,请改用:'23:59:59.997'
。
【参考方案1】:
我认为您所拥有的没有问题,除非s-s-rS
是问题或_Travel.Start_Time
不是TIME
类型。
看到这个:SQL Fiddle
示例 SQL:
-- Sample with trimming time portion off datetime
SELECT DATEDIFF(mi, CONVERT(TIME, '23:59:59'),
LTRIM(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 100), 7))) AS TIME_DIFFERENCE
-- Sample with time conversion of datetime
SELECT DATEDIFF(mi, CONVERT(TIME, '23:59:59'),
CONVERT(TIME, GETDATE())) as TIME_DIFFERENCE
另外,你有没有试过转换db值:
SELECT DATEDIFF(mi, CONVERT(TIME, '23:59:59'),
CONVERT(TIME, _Travel.Start_Time)) AS TIME_DIFFERENCE
【讨论】:
不敢相信。 _Travel.Start_Time 是 VARCHAR。现在已经尝试过 CONVERT(TIME, '23:59:59'), CONVERT(TIME, _DatabaseSettings.Value)) 但仍然遇到同样的错误。 @user1022772 给我一个 varchar 格式的示例时间 17:30:00, 08:30:00。还有一些空值在考虑它 是列中的这个值还是2 抱歉,列中有一个值。这里只给出了两个输出示例以上是关于两次之间的时间差(分钟)的主要内容,如果未能解决你的问题,请参考以下文章