我在postgis中有矢量图块。没有铸造类型的经验。 vector-tile-spec支持以下类型:string,float,double,int64,uint64,sint64,bool。这意味着除了Varchar,Text,CharArray,Float4,Float8,Int2,Int4,Int8,Bool之外的所有PostgreSQL类型都必须转换为其中之一。
我的表中有两个字段是DATES,即'带时区的时间戳':createdAt和updatedAt。我想以支持的类型存储,那么我该怎么做呢?
我目前:
但是所有3(或至少2和3)都需要以支持的类型结束。
答案 0 :(得分:0)
我会将您的日期投放到INTEGER
或BIGINT
,具体取决于您需要使用的日期范围,并且只计算Unix Time的天数。
假设您刚刚投放到INTEGER
,您可以定义以下函数,以便从dates
转换为纪元日期的天数(1970-01-01 00:00:00
):
CREATE FUNCTION days_from_reference_date(d date)
RETURNS INTEGER
AS
$$
SELECT
CAST(EXTRACT(epoch from d) / (60 * 60 * 24 /* seconds in a day */) AS INTEGER) ;
$$
LANGUAGE SQL
STRICT
IMMUTABLE ;
您可以在类似这样的场景中使用它:
SELECT
days_from_reference_date(d) AS transformed_date
FROM
dates
ORDER BY
transformed_date ;
可以通过以下方式完成反向转换:
CREATE FUNCTION date_from_days_from_reference_date(days integer)
RETURNS date
AS
$$
SELECT CAST(to_timestamp(cast(days as bigint) * 60 * 60 * 24) AS date);
$$
LANGUAGE SQL
STRICT
IMMUTABLE ;
您可以在 dbfiddle here
查看几个示例参考文献:
to_timestamp
和extract(epoch from ...)
。警告:抵消一天,日期为BC;如果你需要它们。它可以通过在反向转换函数中检查它们来解决。