2017-04-18 82 views
0

我试图创建一个真/假标志,是真实的,当两个日期参数集包含一些重叠的时间或天。我的理解是,Postgres的已经有一个名为“”重叠了这样的功能,因为此文档中看到,从8.4:重叠功能的红移

[https://www.postgresql.org/docs/8.4/static/functions-datetime.html][1]

当我尝试在红移使用OVERLAPS,似乎功能的工作原理,请参阅下面的例子:

SELECT (DATE '2001-02-16', DATE '2001-12-21') OVERLAPS 
    (DATE '2001-10-30', DATE '2002-10-30'); 

然而,当我尝试使用它来填充柱,它会产生一个错误,见下面的例子,其中的结果应始终是真实的,因为它的AA时期与自己进行比较。在这个例子中,我使用时间戳和时区,但我也试过这个没有时区,并为刚刚日期,所有这些失败,同样的错误。

CREATE TABLE date_table (
    variable VARCHAR, 
    date_start TIMESTAMP WITH TIME ZONE, 
    date_end TIMESTAMP WITH TIME ZONE 
) 
; 
INSERT INTO date_table VALUES ('max_date', TO_TIMESTAMP('2017/04/05 
00:00:00', 'YYYY/MM/DD HH24:MI:SS'), TO_TIMESTAMP('2017/04/09 00:00:00', 
'YYYY/MM/DD HH24:MI:SS')) 
; 
INSERT INTO date_table VALUES ('min_date', TO_TIMESTAMP('2016/04/06 
00:00:00', 'YYYY/MM/DD HH24:MI:SS'), TO_TIMESTAMP('2016/04/15 00:00:00', 
'YYYY/MM/DD HH24:MI:SS')) 
; 
INSERT INTO date_table VALUES ('min_date', TO_TIMESTAMP('2015/04/01 
00:00:00', 'YYYY/MM/DD HH24:MI:SS'), TO_TIMESTAMP('2015/04/14 00:00:00', 
'YYYY/MM/DD HH24:MI:SS')) 
; 

SELECT dt.*, (date_start, date_end) OVERLAPS (date_start, date_end) AS 
overlap_test 
FROM date_table dt 

我得到的错误是如下:

An error occurred when executing the SQL command: 
SELECT dt.*, (date_start, date_end) OVERLAPS (date_start, date_end) AS overlap_test 
FROM date_table dt 

[Amazon](500310) Invalid operation: Specified types or functions (one per INFO message) not supported on Redshift tables.; 

Warnings: 
Function ""overlaps"(timestamp without time zone,timestamp without time zone,timestamp without time zone,timestamp without time zone)" not supported. 


Execution time: 0.07s 
Statement 1 of 1 finished 

1 statement failed. 
+1

红移是基于Postgres的8.0所以读取任何手册以后的版本是没有意义的。实际上阅读Postgres手册没有意义,你应该查阅Redshift手册:http://docs.aws.amazon.com/redshift/latest/dg/cm_chap_SQLCommandRef.html('overlaps'似乎没有记录在所有有) –

+0

关于错误:你的第一个例子使用'DATE'值。在你的第二个例子中,你正在使用'TIMESTAMP'值。正如错误信息所示,这显然不受支持 –

+0

Gotcha,我的错误,这里是从8.0列出的链接。 https://www.postgresql.org/docs/8.0/static/functions-datetime.html由于第一个例子返回一个结果,它显然在Redshift中可用,并且'OVERLAPS'出现在redshift保留列表中:http:它只是好奇,红移似乎没有其他功能的文件。 –

回答

0

红移是基于Postgres的,但它是 Postgres的。纵观Postgres的文档中提供的功能是不是一个好主意,在红移唯一支持的功能是那些红移文件中明确列出,在这种情况下,只有these date and time functions支持。不支持OVERLAPS,因此会收到警告消息。

我不知道为什么你的第一个SELECT语句不会触发此警告,可能是因为它没有在查询任何实际表。

+0

这很有帮助,我会停止试验Redshift文档中未列出的函数,谢谢! –