从PostgreSQL的时间戳中提取date(yyyy / mm / dd)
我想从PostgreSQL中的时间戳中提取date部分。
我需要它是一个postgresql DATE
types,所以我可以插入到另一个预期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
从PostgreSQL的时间戳中提取date(yyyy / mm / dd)的最佳方法是什么?
您可以通过将date后缀添加到date来将时间戳转换为::date
。 在这里,在psql中,是一个时间戳:
# select '2010-01-01 12:00:00'::timestamp; timestamp --------------------- 2010-01-01 12:00:00
现在我们将它投射到一个date:
wconrad=# select '2010-01-01 12:00:00'::timestamp::date; date ------------ 2010-01-01
另一方面可以使用date_trunc
函数。 他们之间的区别是,后者返回像timestamptz
一样的数据types,保持您的时区完整(如果你需要的话)。
=> select date_trunc('day', now()); date_trunc ------------------------ 2015-12-15 00:00:00+02 (1 row)
使用datefunction:
select date(timestamp_field) from table
从字符字段表示到您可以使用的date:
select date(substring('2011/05/26 09:00:00' from 1 for 10));
testing代码:
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;
testing结果:
你有没有试图把它转换成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)
另一个testing套件:
SELECT pg_catalog.date(t) FROM sometable; date ------------ 2011-05-26 (1 row) SHOW datestyle ; DateStyle ----------- ISO, MDY (1 row)