【问题标题】:SQL querying dates, weird formatSQL查询日期,奇怪的格式
【发布时间】:2020-06-09 05:16:28
【问题描述】:

我正在尝试分析一个 MYSQL 表。

我在列中有日期时间,表示项目的开始和结束时间。

{"stmt":"SELECT start_at, end_at FROM trafficdata;","header":
["start_at","end_at"],

"rows":

[["1022290663000","1022809063000"],["1172792113000","1173483313000"],["1351803408000","1353531408000"],["1290517173000","1293022773000"]

希望使用 SQLite 以小时格式将其输出到日期时间

【问题讨论】:

标签: sql sqlite


【解决方案1】:

这些值可能是一个整数,计数自 1970 年第一刻(UTC,1970-01-01T00:00Z)的纪元参考以来的毫秒数。

这里有一些 Java 代码将这些数字解析为 Instant 对象。

List< Long > inputs = List.of( 1_022_290_663_000L , 1022809063000L , 1172792113000L , 1173483313000L , 1351803408000L , 1353531408000L , 1290517173000L , 1293022773000L ) ;
for( Long input : inputs ) 
{
    Instant instant = Instant.ofEpochMilli( input ) ;
    System.out.println( input + " → " + instant ) ;
}

看到这个code run live at IdeOne.com

1022290663000 → 2002-05-25T01:37:43Z

1022809063000 → 2002-05-31T01:37:43Z

1172792113000 → 2007-03-01T23:35:13Z

1173483313000 → 2007-03-09T23:35:13Z

1351803408000 → 2012-11-01T20:56:48Z

1353531408000 → 2012-11-21T20:56:48Z

1290517173000 → 2010-11-23T12:59:33Z

1293022773000 → 2010-12-22T12:59:33Z

要计算一对之间经过的时间,请从后面的数字中减去前面的数字,除以 1,000 表示秒数,除以 60 表示分钟数,再除以 60 表示小时数。

我不使用 SQLite,但我想你可以使用 arithmetic operators found in SQLite 来做到这一点。

可能是这样的:

SELECT ( ( end_at - start_at ) / 1000 / 60 / 60 ) 
FROM whatever ;

【讨论】:

  • 太棒了。我将如何在 SQLite 查询中使用它来使这些列具有这种适当的格式?
  • @MichaelHolborn 您没有指定“适当的格式”。我以为你问的是每对之间经过的时间?
  • 道歉 - 我本来打算使用 SQLite 找到解决方案(在这个任务中我必须使用 SQL,否则我会同意你并使用 Java 或 Python:/)
  • @MichaelHolborn 在底部查看我的编辑,以及我对 SQLite 中 SQL 代码的猜测。
  • @MichaelHolborn 无论您使用哪种语言,概念都是相同的:减去两次并除以将毫秒转换为小时。
【解决方案2】:

我认为该值是当前的 Time Millis。您可以转换为 Java Util Date。 像 java.util.Date date= new Date (long value);需要将 long 值作为参数传递。

【讨论】:

    猜你喜欢
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多