Postgres:如何在没有时区的情况下声明日期数据类型?

时间:2015-07-02 17:05:11

标签: sql postgresql sqldatatypes greenplum

创建如下表格:

create table stg.kv_test(test_date date);

insert into stg.kv_test values ('2015-07-02');

select * from stg.kv_test

提供输出:

test_date
2015-07-02 00:00:00

我在Aginity Workbench中执行了上述查询。

我的问题如下:

  • 在Postgres中,日期数据类型是否始终使用 时区部分?

  • 它是如何存储在数据库中的?

  • 我用来查询哪个工作台有问题 将时区附加到输出中?

1 个答案:

答案 0 :(得分:2)

首先澄清一下,我认为你的意思是“时间部分”,而不是“时区部分”。您创建的字段和获得的结果不包含时区信息。

我认为您的查询工具选择使用时间部分显示日期。内部PostgreSQL stores the date type without time

这是我在这里使用psql工具得到的:

select now()::timestamp;
            now             
----------------------------
 2015-07-03 02:32:15.965677
(1 row)

而不是:

::date

所以它可能是Aginity。据我所知,Aginity(或任何其他sql客户端)返回的将是原始数据 - 它如何转换为文本将由客户端决定。如果您使用上面的select to_char(now(), 'YYYY-MM-DD'); to_char ------------ 2015-07-03 (1 row) 显式转换,请看看会发生什么。

如果您希望查询控制文本的显示方式,请使用formatting functions在查询中转换为文本来控制输出。例如:

using System;
using System.Collections.Generic;

namespace Xamarin.Forms
{

    [ContentProperty("Children")]
    public abstract class Layout<T> : Layout, IViewContainer<T> where T : global::Xamarin.Forms.View
    {
        protected Layout();
        public IList<T> Children { get; }

        protected virtual void OnAdded(T view);
        protected virtual void OnRemoved(T view);
    }
}

请注意,上面返回的列类型为“text”类型,而其他类型为“date”或“timestamp”。