Sql server 在tsql中查找时间差

Sql server 在tsql中查找时间差,sql-server,tsql,Sql Server,Tsql,我有两个约会: 2016-11-10 18:30:00 1901-01-01 19:00:00 我需要返回的时间差是30分钟,所以是1.5小时。我完全不在乎日期 我确实意识到这是一个常见的问题,但我很难将我找到的答案应用到我的具体问题上 感谢您的帮助。这将为您指明一个合适的方向: declare @Foo as DateTime = '2016-11-10 18:30:00', @Bar as DateTime = '1901-01-01 19:00:00'; select @Foo as

我有两个约会:

2016-11-10 18:30:00
1901-01-01 19:00:00
我需要返回的时间差是30分钟,所以是1.5小时。我完全不在乎日期

我确实意识到这是一个常见的问题,但我很难将我找到的答案应用到我的具体问题上


感谢您的帮助。

这将为您指明一个合适的方向:

declare @Foo as DateTime = '2016-11-10 18:30:00',
  @Bar as DateTime = '1901-01-01 19:00:00';
select @Foo as Foo, @Bar as Bar,
  Cast( @Foo as Time ) as FooTime, Cast( @Bar as Time ) as BarTime,
  DateDiff( minute, Cast( @Foo as Time ), Cast( @Bar as Time ) ) as DeltaMinutes;

我不知道它涵盖了所有情况,但您可以做如下操作

DECLARE @Val1 DATETIME = '2016-11-10 18:30:00'
DECLARE @Val2 DATETIME = '1901-01-01 19:00:00'

SELECT ABS(DATEDIFF(MINUTE, RIGHT(@Val2, 8), RIGHT(@Val1, 8))) -- 30

在Teradata SQL中,我也遇到了类似的场景,时间是整数,所以可以将差异取为如下:

SELECT CAST(CAST((END_TM-STRT_TM)AS INTEGER FORMAT '99:99:99') AS INTEGER FORMAT'99:99') as New_Diff FROM TABLE

@jmoerdyk的可能副本我可能是误读了您链接中提供的答案,无法找出答案,或者您误解了我的问题。我只需要日期的小时部分之间的差异。您是否阅读了
DATEDIFF
函数的文档?您将使用
HOURS
MINUTES
作为
datepart
参数。您的意思是只关心DateTimes的时间部分而不是日期部分吗?@GantheLower这是正确的。考虑到我发布的日期,我想要的答案是30分钟。理想情况下,我希望将其表示为一小时的小数点,.50。您可以使用
7
而不是
8
作为子字符串长度,因为将
DATETIME
强制转换为
VARCHAR
的默认格式是“mon-dd-yyyy-hh:mim(或PM)”。(.如果你
选择Right(@Val1,19),Right(@Val1,8)
你会看到额外的空间(和丢失的秒数)。与其往返于文本之间,而且由于国际化带来的乐趣,更可靠的方法是坚持数字处理日期和时间。这也得出690,这也是@Habo提供的另一个答案。我猜我遗漏了一些非常简单的东西。任何进一步的澄清都将是错误的非常感谢。谢谢您的帮助,但我的回答是690。我是不是在您的解释中遗漏了一些东西,或者是DateDiff如何运行的一些基本方面,我不理解?@MPJ567如果您将日期/时间替换为
'2016-11-10T18:30:00'
'1901-01-01T19:00:00'
,这些都是ISO格式的这应该不受国际化问题的影响。中间结果是否是预期值,即
FooTime
18:30:00.0000000
?我第一次尝试此操作时一定做错了什么。第二次尝试后一切正常。非常感谢您的帮助。