返回整数ansi sql 92的时差

Posted

技术标签:

【中文标题】返回整数ansi sql 92的时差【英文标题】:Time difference returning integer ansi sql 92 【发布时间】:2016-11-03 15:17:15 【问题描述】:

我正在尝试使用 sql ansi-92 计算两个日期时间之间的分钟数。我无法使用timestampdiff() 函数,因为我收到错误响应。

我试过date1-date2,但我总是得到0的结果(虽然没有错误)。

例子:

select '2016-11-02 15:25:00' - '2016-11-02 15:05:00'

【问题讨论】:

您使用的是什么 SQL 引擎?为什么你认为它应该支持这个功能? @ajeh:他们使用标准 SQL-92 并且规范指出,“涉及日期时间或间隔类型项目的算术运算遵守与日期和时间相关的自然规则,并根据到公历...并返回一个精确的数值,表示日期时间或间隔的一个组件的值。" 我假设时间颗粒默认为DAY,即天差为零。 你是在告诉我 SQL-92 是一个引擎吗?我认为这是一个标准。 @ajeh:你是唯一一个在谈论“引擎”的人。我认为 OP 对符合 ISO 标准 SQL-92 的 code 感兴趣。也许Mimer's SQL-92 Validator 满足您对能够测试代码的“引擎”的要求? 【参考方案1】:

这当然适合你:

select TIMESTAMPDIFF(MINUTE,a.my_date2,a.my_date) diff,
       TIMESTAMPDIFF(MINUTE,'2016-11-02 15:05:00','2016-11-02 15:25:00') diff2
from my_tab a

我得到了输出(以分钟为单位的差异):

| diff | diff2 |
|------|-------|
|   20 |    20 |

如果您需要,我使用此代码创建表:

create table my_tab
(
  my_date datetime,
  my_date2 datetime
  )
 ;
 insert into my_tab (my_date, my_date2)
 values ('2016-11-02 15:25:00', '2016-11-02 15:05:00')
 ;

【讨论】:

以上是关于返回整数ansi sql 92的时差的主要内容,如果未能解决你的问题,请参考以下文章

如何减去两个 sql 时间戳字段,然后以小时为单位返回时差

SQL AVG 返回一个 int

两个日期之间的天数 - ANSI SQL

将 sql BETWEEN 子句从 ANSI 89 转换为 ANSI 92

SET ANSI_NULLS ON 在T-SQL中是什么意思

如何编写这两个(ANSI)SQL 查询?