Дата извлечения (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?
Ответы
Ответ 1
Вы можете наложить метку времени на дату, добавив ее с помощью ::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)
Ответ 2
Используйте функцию date:
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 result]()
![pgAdmin result wide]()
Ответ 3
Вы пытались направить его на дату, <mydatetime>::date
?
Ответ 4
Это работает для меня в python 2.7
select some_date::DATE from some_table;
Ответ 5
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)
Ответ 6
Просто сделайте select date(timestamp_column)
, и вы получите только часть даты.
Иногда выполнение select timestamp_column::date
может вернуть date 00:00:00
, если он не удаляет часть 00:00:00
. Но я видел, что date(timestamp_column)
отлично работал во всех случаях. Надеюсь это поможет.
Ответ 7
В postgres просто:
TO_CHAR (timestamp_column, 'DD/MM/YYYY') как дата отправки