Intereting Posts
В драйвере Oracle JDBC, что происходит с часовым поясом, когда вы пишете дату Java в столбце TIMESTAMP? Hibernate производит различный SQL для каждого запроса Хранимые процедуры MYSQL: декларация переменных и условные выражения Зашифрованный запрос к базе данных Создание длинной строки из набора результатов Объединение нескольких столбцов из одной таблицы в один столбец из другой таблицы Класс оператора postgresql "varchar_pattern_ops" не принимает тип данных integer Выберите последние данные из таблицы истории Преобразование результатов поиска в сценарий Insert – SQL Server Функция SQL для преобразования координат ОС Великобритании с востока на север и долготу и широту Интересный SQL Присоединиться к датам между датами Создать индекс на частичной колонке CHAR Как ограничить строки, где SUM столбца равно определенному значению в Oracle GROUP BY – не группировать NULL Предоставить разрешение SELECT для представления, но не для базовых объектов

Дата извлечения (yyyy / mm / dd) из метки времени в PostgreSQL

Я хочу извлечь только часть даты из метки времени в PostgreSQL.

Мне нужно, чтобы это был тип postgresql DATE поэтому я могу вставить его в другую таблицу, которая ожидает значение DATE .

Например, если у меня есть 2011/05/26 09:00:00 , я хочу 2011/05/26

Я пробовал кастинг, но я получаю только 2011:

 timestamp:date cast(timestamp as date) 

Я попытался to_char() с to_date() :

 SELECT to_date(to_char(timestamp, 'YYYY/MM/DD'), 'YYYY/MM/DD') FROM val3 WHERE id=1; 

Я попытался сделать это функцией:

 CREATE OR REPLACE FUNCTION testing() RETURNS void AS ' DECLARE i_date DATE; BEGIN SELECT to_date(to_char(val1, "YYYY/MM/DD"),"YYYY/MM/DD") INTO i_date FROM exampTable WHERE id=1; INSERT INTO foo(testd) VALUES (i); END 

Каков наилучший способ извлечения даты (yyyy / mm / dd) из метки времени в PostgreSQL?

Вы можете наложить свою метку времени на дату, суффикс которой ::date . Здесь, в psql, есть метка времени:

 # select '2010-01-01 12:00:00'::timestamp; timestamp --------------------- 2010-01-01 12:00:00 

Теперь мы перейдем к дате:

 wconrad=# select '2010-01-01 12:00:00'::timestamp::date; date ------------ 2010-01-01 

С другой стороны, вы можете использовать функцию date_trunc . Разница между ними заключается в том, что последний возвращает тот же тип данных, что и timestamptz сохраняя ваш часовой пояс без изменений (если вам это нужно).

 => select date_trunc('day', now()); date_trunc ------------------------ 2015-12-15 00:00:00+02 (1 row) 

Используйте функцию даты :

 select date(timestamp_field) from table 

Из представления поля символа на дату вы можете использовать:

 select date(substring('2011/05/26 09:00:00' from 1 for 10)); 

Тестовый код:

 create table test_table (timestamp_field timestamp); insert into test_table (timestamp_field) values(current_timestamp); select timestamp_field, date(timestamp_field) from test_table; 

Результат испытаний:

Результат pgAdmin

pgAdmin result wide

Вы пытались <mydatetime>::date его к дате с <mydatetime>::date ?

Это работает для меня в python 2.7

  select some_date::DATE from some_table; 
 CREATE TABLE sometable (t TIMESTAMP, d DATE); INSERT INTO sometable SELECT '2011/05/26 09:00:00'; UPDATE sometable SET d = t; -- OK -- UPDATE sometable SET d = t::date; OK -- UPDATE sometable SET d = CAST (t AS date); OK -- UPDATE sometable SET d = date(t); OK SELECT * FROM sometable ; t | d ---------------------+------------ 2011-05-26 09:00:00 | 2011-05-26 (1 row) 

Другой тестовый комплект:

 SELECT pg_catalog.date(t) FROM sometable; date ------------ 2011-05-26 (1 row) SHOW datestyle ; DateStyle ----------- ISO, MDY (1 row)