【发布时间】:2019-02-18 15:06:16
【问题描述】:
短版:
如何通过 ODBC 驱动程序获得 2 个时间戳之间的秒数差异?
加长版:
使用 ODBC 进行简单查询(不是我使用强制转换(...作为时间戳)来拥有一个独立的行,实际查询是针对带有时间戳数据的表运行的):
select unix_timestamp(cast('2019-02-01 01:02:03' as timestamp)) as tto
我收到错误消息:
unix_timestamp 不是有效的标量函数或过程调用
我找不到任何可以改变这一点的配置选项。本机查询被禁用(因为我使用的是准备好的语句)并且其他功能工作正常。我的猜测是 unix_timestamp() (不带参数)已被弃用,驱动程序有点热衷于阻止使用该功能。
我试图解决这个问题,我将时间戳转换为 bigint,而不是使用 unix_timestamp 函数:
select cast(cast('2019-02-01 01:02:03' as timestamp) as bigint)
这很好用!但是当我尝试获取 2 个时间戳的差异时:
select cast(cast('2019-02-01 01:02:03' as timestamp) as bigint) - cast(cast('2019-02-01 01:02:03' as timestamp) as bigint)
我收到了消息
操作数类型 SQL_WCHAR 和 SQL_WCHAR 与二进制不兼容 减号运算符
(但仅适用于复杂查询,如果查询仅包含此选择,则不适用)。
驱动程序将接受 2 个时间戳之间的差异,但最终我得到一个间隔类型,我无法将其转换回秒。
我认为这些是 ODBC 驱动程序中的错误,但我无法联系 Hortonworks,因为我不是付费客户,也无法联系 Simba,因为我不是付费客户。
附带说明,如果我尝试使用 floor 函数,我会收到以下消息:
“floor”是保留关键字。
是的,我知道它是保留的,我实际上正在尝试使用它。
知道如何解决这个问题吗?
【问题讨论】: