Как сделать запрос из результата измененного столбца таблицы в postgresql - PullRequest
0 голосов
/ 20 сентября 2018

Итак, у меня есть столбец строкового времени в таблице, и теперь я хочу изменить тип времени этого времени на дату, а затем запросить данные для выбранных дат.

Есть ли прямой способ сделать это?Один из способов, о котором я могу подумать: 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;

Может ли кто-нибудь исправить эти запросы?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Решается следующим образом:

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
0 голосов
/ 20 сентября 2018

Вам не нужны эти шаги, просто используйте предложение 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);

Если ваши строковые метки времени имеют правильный формат, это должно бытьдостаточно.

...