代码之家  ›  专栏  ›  技术社区  ›  Atihska

如何在postgresql中查询表中更改列的结果

  •  0
  • Atihska  · 技术社区  · 6 年前

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

    有没有直接的方法?我能想到的一个办法是 1) 添加新列 2) 在其中插入值和转换日期

    在这里,我与插入卡住了第二步,所以需要帮助

      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;
    

    有人能纠正这些问题吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Michel Milezzi    6 年前

    你不需要这些步骤,只要使用 USING CAST 关于你方的条款 ALTER TABLE

    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
  •  0
  •   Atihska    6 年前

    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