【问题标题】:how to convert a timestamp to int in sql (vertica)如何在sql(vertica)中将时间戳转换为int
【发布时间】:2017-07-20 04:11:24
【问题描述】:

我有一个2017-07-19 11:45:01的时间戳,我希望它转换为int。

查询:

select cast(max(event_timestamp) as INT) from error_messages where error_level='ERROR' and user_name='git'

错误:

SQL Error [2366] [42846]: [Vertica][VJDBC](2366) ERROR: Cannot cast type timestamptz to int
  [Vertica][VJDBC](2366) ERROR: Cannot cast type timestamptz to int
    com.vertica.util.ServerException: [Vertica][VJDBC](2366) ERROR: Cannot cast type timestamptz to int

【问题讨论】:

  • @Swat 使用 Vertica 中的 JULIAN_DAY 函数将时间戳转换为整数值或大整数。
  • 谢谢@RohitPadma
  • @Swat 欢迎您! :)

标签: sql vertica


【解决方案1】:

你必须这样使用TIMESTAMPDIFF()

SELECT TIMESTAMPDIFF(SECOND,'001-01-01 00:00:00', '2015-02-23 03:12:35');
 timestampdiff 
---------------
   63560257955

获取您想要的时间单位的数量(上面的秒数),因为您想要的时间戳...

【讨论】:

  • 即使在 end_timestamp 为空时也能正常工作。如果我只有 start_timestamp ,我怎么能得到分钟数。我正在尝试获取查询执行的分钟数(start_timestamp 看起来像 2017-07-19 11:45:01)
  • 只有在知道开始和结束位置的情况下,才能使用通用metric 测量开始/结束距离。如果 end_timestamp 缺失(别名 NULL,别名未知),唯一的选择是使用 IFNULL/NVL/COALESCE 将这些 NULL 转换为通用的“人工”值。例如用current_timestamp:IFNULL(end_timestamp, current_timestamp) 替换 end_timestamp - when NULL
【解决方案2】:

如果您想将该日期的 Unix 时间戳记为 int,而不是搜索该日期。 一种选择是以秒为单位计算从您的日期到“1970-01-01”的范围为 int。这是 Unix 时间戳。

【讨论】:

    【解决方案3】:

    使用 Vertica 中的 JULIAN_DAY 函数将时间戳转换为整数值或数字。

    更多详情请参考 Vertica 文档链接:https://my.vertica.com/docs/6.1.x/HTML/index.htm#16070.htm

    以 1 秒的间隔从日期时间中提取数字。

    SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-08'); 
    

    【讨论】:

    • JULIAN_DAY 转换 DATE 部分,返回自儒略历开始以来的 天数。换句话说......你将失去小时:分钟:秒。亚秒部分
    • @mauro 我认为是一天,所以更新了考虑秒数的答案。
    • 假设您想要从 Epoch 开始的秒数,您的编辑是可以接受的,但是...返回的值是 NUMERIC(18,6) 而不是 INTEGER。
    • 因为需要整数,所以我使用了 Julian_day。是的,返回值是数字。
    猜你喜欢
    • 2019-07-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2021-06-03
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多