从PostgreSQL的时间戳中提取date(yyyy / mm / dd)

我想从PostgreSQL中的时间戳中提取date部分。

我需要它是一个postgresql DATEtypes,所以我可以插入到另一个预期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结果:

pgAdmin的结果

pgAdmin结果广泛

你有没有试图把它转换成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)