【问题标题】:convert timestamp to current time format in SQL在 SQL 中将时间戳转换为当前时间格式
【发布时间】:2021-09-29 01:58:11
【问题描述】:

我有一个时间戳列,其值采用以下格式:

2021-07-20T18:40:36.368126186Z

我想将结果转换为干净的时间戳(以 24 小时格式):

2021-07-20 18:40:36

我尝试使用 DATE 字段,它只给我日期,而 DATETIME 函数在我的数据库上不起作用。

select timestamp,
DATE(timestamp),
CURRENT_TIMESTAMP(0) AT TIME ZONE 'America/New_York'  
from  table

-- This doesn't work for now as the DATE method removes the time.

我选择的输出格式类似于 CURRENT_TIMESTAMP(0) AT TIME ZONE 'America/New York'。我怎样才能得到它。我可以使用正则表达式来删除我不需要的值吗?

【问题讨论】:

  • 用您正在使用的数据库标记问题。
  • 您使用的是哪个 dbms? (在日期/时间方面,许多产品都有自己的功能 - 远不符合 ANSI SQL。)
  • 大家好,我正在使用 vertica
  • 那行不通,但感谢您的帮助。我找到了一种方法并发布了答案。

标签: sql vertica datetime-conversion


【解决方案1】:

我得到了答案:

SELECT timestamp AS original_ts, 
to_timestamp(REPLACE(REPLACE(timestamp,'T',' '),'Z',''),'YYYY-MM-DD HH:MI:SS') 
AS modified_ts from table

我也尝试使用 TO_TIMESTAMP_TZ 方法进行 CAST,但它没有按预期工作。如果有更好的解决方案,我很高兴知道,但现在我得到了答案。

【讨论】:

    【解决方案2】:

    只需删除传入字符串末尾的“Z”并将其转换为没有第二个分数的时间戳。

    WITH
    indata(string) AS (
      SELECT '2021-07-20T18:40:36.368126186Z'
    )
    SELECT
      REPLACE(string,'Z','')::TIMESTAMP(0) AS resulting_timestamp_0
    FROM indata;
     resulting_timestamp_0 
    -----------------------
     2021-07-20 18:40:36
    (1 row)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      相关资源
      最近更新 更多