演员日期为int4

时间:2014-09-10 13:49:26

标签: sql date casting inner-join netezza

我正在使用NETEZZA,我想在日期之前加入两个单独的表。在第一个表中,日期存储为类型"日期" (例如,2014-09-10)在第二个表中,日期存储为类型" int4" (20140910)。我已经尝试按日期加入表格:

select * 
from table1 a inner join table2 b 
     on date(a.start_date) = to_date(b.start_date, 'YYYYMMDD')

这样运行但很慢。我建议我,如果我可以将table1中的日期转换为int4,然后简单地比较int4' s,那么比较可能会快得多。但是,我无法找到办法,或者这是最好的方法。

2 个答案:

答案 0 :(得分:1)

以下是您的查询:

select * 
from table1 a inner join
     table2 b 
     on date(a.start_date) = to_date(b.start_date, 'YYYYMMDD');

通常,数据库在连接不同类型的列或与函数连接时非常困难。原因有两个:功能使得使用索引变得困难(或不可能)。不同类型列的统计信息不兼容。

但是,如果将所有功能移到一侧,引擎可能会执行某些操作。例如:

select * 
from table1 a inner join
     table2 b 
     on b.start_date = cast(to_char(a.start_date, 'YYYYMMDD') as int);

这一方面完成了所有转换。如果您在b.start_date上有索引,则可以扫描table1并在索引中查找相应的值。因此,这个版本可能运行得更快,但不如表格使用相同的类型。

答案 1 :(得分:0)

尝试相同的日期类型,这可能会起作用

SELECT *
FROM table1 a
INNER JOIN table2 b
ON (to_date(a.start_date,'YYYY-MM-DD') = to_date (b.start_date, 'YYYY-MM-DD'))