【问题标题】:How to find data with timestamp larger than a certain date time in SQL DBeaver?如何在 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 服务器。

标签: sql sql-server datetime


【解决方案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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多