首页 文章

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

提问于
浏览
185

我想从PostgreSQL中的时间戳中提取日期部分 .

我需要它是一个postgresql DATE 类型,所以我可以将它插入到另一个需要 DATE 值的表中 .

例如,如果我有 2011/05/26 09:00:00 ,我想 2011/05/26

I tried casting, but I only get 2011:

timestamp:date
cast(timestamp as date)

I tried to_char() with to_date():

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

I tried to make it a function:

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中的时间戳中提取日期(yyyy / mm / dd)的最佳方法是什么?

6 回答

  • 332

    您可以通过使用 ::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)
    
  • 7

    使用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

  • 0

    您是否尝试使用 <mydatetime>::date 将其投放到某个日期?

  • 79

    这在python 2.7中适用于我

    select some_date::DATE from some_table;
    
  • 2
    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)
    
  • 7

    只要做 select date(timestamp_column) ,你就会得到唯一的日期部分 . 有时候 select timestamp_column::date 可能会返回 date 00:00:00 ,它不会删除 00:00:00 部分 . 但我看到 date(timestamp_column) 在所有情况下都能完美地运作 . 希望这可以帮助 .

相关问题