我只想从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 100 with 101:

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)的最佳方法是什么?

推荐答案

你可以用::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)

Sql相关问答推荐

IS True操作员

当编号和版本的唯一状态更改时报告

如何将varchar传递给tvf并使用该参数来查询结果SQL服务器

对于表A中的每一行,更新表B中与金额有关的行

如何退回当年的所有参赛作品?""

Select 起始参数和截止参数之间的间隔,包括与期间重叠的参数

SQL子查询返回多个值错误

属于(日期)范围类型及其交集的总权重​

从类似JSON的字符串列创建新列

按用户和时间列出的SQL Group考勤列表

使用同一个表,为什么IN、NOT IN、NOT EXISTS和EXISTS有不同的输出?

使用左外部联接更正列中第+1行的值时重复

不同计数的 Postgres PIVOT 表

DbUp for sqlserver 在 dbo 授权下为非 dbo 用户创建架构

将空 JSON 数组添加到 SQL Server 表列中的 JSON 字符串

计算组内多个日期间隔go 年的累计天数

按公司和产品查询最近发票的平均价格的SQL查询

SQL中如何转置表格 UNPIVOT是唯一的 Select 吗?

使用给定的变量对在循环中执行更新语句

如何跨行合并以删除 SQL 中的空值?