如何在 SQL DBeaver 中查找时间戳大于某个日期时间的数据?

Posted

技术标签:

【中文标题】如何在 SQL DBeaver 中查找时间戳大于某个日期时间的数据?【英文标题】:How to find data with timestamp larger than a certain date time in SQL DBeaver? 【发布时间】:2021-03-08 20:35:10 【问题描述】:

我正在使用 DBeaver 通过以下查询跟踪数据库。它返回给我以下错误:

SQL 错误 [1]:查询失败 (#20210308_222034_93358_9bhns):第 22:5 行:无法解析列“datatime”

有没有人知道查询大于某个日期时间(例如日期时间>'2021-02-01 00:00:00')的数据的简单方法?

这里是查询:

select
    timestamp,
    FROM_UNIXTIME(timestamp / 1000) as datatime,
    subscription_name,
    path,
    value
from
    xx.xxxx
where
    subscription_name = 'xx_xx_xx'
    and path in (xxx)
    and datatime > '2021-02-01 00:00:00'

【问题讨论】:

2021-02-01 00:00:00 需要引号,例如'2021-02-01 00:00:00' 您使用的是哪个数据库? @a_horse_with_no_name 这是一个 SQL 服务器。 @jarlh 感谢您的收获。它也不适用于报价。我更新了问题。 @eshirvana 这是一个 SQL 服务器。 【参考方案1】:

到目前为止,我已经找到了以下创可贴,它可以在某个日期之后为我提供数据(但它不会让我缩小时间窗口)"

FROM_UNIXTIME(timestamp/1000) >= date('2021-03-05')

基本上,FROM_UNTXTIME() 输出似乎是日期时间格式,而不是字符串格式。

所以也许如果我们可以将字符串转换为日期时间格式,问题就可以解决。有什么想法吗?

【讨论】:

【参考方案2】:

根据错误消息,它不能将日期时间视为要在 where 子句中使用的列。然后,试试这个。

select
    timestamp,
    FROM_UNIXTIME(timestamp / 1000) as datetime,
    subscription_name,
    path,
    value
from
    xx.xxxx
where
    subscription_name = 'xx_xx_xx'
    and path in (xxx)
    and DATE_FORMAT(FROM_UNIXTIME(timestamp / 1000), '%Y-%m-%d')  > '2021-02-01'

【讨论】:

它不起作用,我相信原因是 FROM_UNIXTIME() 格式是日期时间,但前面的字符串是 CHAR。到目前为止,我已经找到了下面的创可贴,它可以在某个日期之后为我提供数据。但这并没有让我缩小时间窗口。关于如何根据日期和时间一起缩小范围的任何想法?和 FROM_UNIXTIME(timestamp/1000) >= date('2021-03-05') 从本质上讲,FROM_UNTXTIME() 输出似乎是数据时间格式,而不是字符串格式。因此,也许如果我们可以将字符串转换为日期时间格式,问题就可以解决。有什么想法吗?【参考方案3】:

好的,我还找到了一种更好的方法,这样我们就可以在 Presto SQL 上控制时间级别:

select 
timestamp,
cast(FROM_UNIXTIME(timestamp/1000) as varchar) as datatime,
subscription_name,
path,
value,
sys_load_dt
        
from xx.xxx
where subscription_name='xx_xx_xx'
and path in(xxx)   
         
and cast(FROM_UNIXTIME(timestamp/1000) as varchar) >= ('2021-03-05 14:18:00.000')
and cast(FROM_UNIXTIME(timestamp/1000) as varchar) < ('2021-03-05 15:18:00.000')
    

唯一剩下的问题是,当我们运行这个查询时,在获取大约 37000 行后它返回以下错误:

任务执行失败

原因: SQL错误[16777220]:查询失败(#20210311_001034_01263_9bhns):分区位置不存在:hdfs://hdfs-batch/data/xx/xx.xxx/sys_load_dt=20201115

如果我们试图限制在时间窗口的一端,它不会返回错误。

【讨论】:

以上是关于如何在 SQL DBeaver 中查找时间戳大于某个日期时间的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 SQL 中的时间戳查找特定事件的下一个序列?

在 Dbeaver 中为文件名模式定义附加变量?

DBeaver,如何声明变量并使用它们?

如何在 DBeaver 中漂亮地格式化我的 SQL 查询?

如何在 DBeaver 上运行任意 SQL?

SQL 获取时间戳差异大于 30 时的 id 计数