【问题标题】:How to query from the result of a changed column of a table in postgresql如何从postgresql中表的更改列的结果中查询
【发布时间】:2019-02-25 04:15:38
【问题描述】:

所以我在表中有一个字符串时间列,现在我想将该时间更改为日期时间类型,然后查询选定日期的数据。

有直接的方法吗?我能想到的一种方法是 1)添加一个新列 2) 使用转换后的日期将值插入其中 3) 使用新列查询

在这里,我遇到了 INSERT 的第二步,所以需要帮助

  ALTER TABLE "nds".”unacast_sample_august_2018" 
    ADD COLUMN new_date timestamp

-- Need correction in select statement that I don't understand
    INSERT INTO "nds".”unacast_sample_august_2018” (new_date)
    (SELECT new_date from_iso8601_date(substr(timestamp,1,10))

有人可以帮助我进行更正吗?如果可能的话,还有更好的方法吗?

尝试了其他方式一步完成,但错误为Column does not exist new_date

SELECT * 
FROM (SELECT from_iso8601_date(substr(timestamp,1,10)) FROM "db_name"."table_name") AS new_date
WHERE new_date > from_iso8601('2018-08-26') limit 10;

SELECT new_date = (SELECT from_iso8601_date(substr(timestamp,1,10)))
FROM "db_name"."table_name"
WHERE new_date > from_iso8601('2018-08-26') limit 10;

有人可以纠正这些问题吗?

【问题讨论】:

    标签: postgresql select sql-insert


    【解决方案1】:

    您不需要这些步骤,只需在您的 ALTER TABLE 上使用 USING CAST 子句:

    CREATE TABLE foobar (my_timestamp) AS
        VALUES ('2018-09-20 00:00:00');
    
    ALTER TABLE foobar 
        ALTER COLUMN my_timestamp TYPE timestamp USING CAST(my_timestamp AS TIMESTAMP);
    

    如果您的字符串时间戳格式正确,这就足够了。

    【讨论】:

    • 感谢您的回复。您能否检查我的编辑并更正我的查询。我想尽量减少步骤。
    【解决方案2】:

    解决如下:

    select *
    from 
    (
      SELECT from_iso8601_date(substr(timestamp,1,10)) as day,*
      FROM "db"."table"
     )
    WHERE  day > date_parse('2018-08-26', '%Y-%m-%d')  
     limit 10
    

    【讨论】:

      猜你喜欢
      • 2012-11-25
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 2020-08-28
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      相关资源
      最近更新 更多