将数月添加到数字YMD格式的有效方法?

时间:2017-08-31 16:33:27

标签: sql netezza

我目前正在忙于一些SQL(在Netezza和HiveQL中)。我们公司经常使用数字字段表示日期(例如,日期为20150602,月份为20160400)。

我需要在其中一个日期添加6个月,通常我会这样做:

cast(to_char(add_months(to_date(A.date,'yyyyMMdd'),6),'yyyyMMdd') as int) 

虽然这并不漂亮,但它确实有用,而且我不知道任何更短或更好的方法。我的主要问题是这是一个大表(120亿行),并且日期转换并不完全是快速的,我正在处理的查询因为长时间运行而被杀死。有没有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

我尝试使用这些列(ALL int)连接到时间维度表: MonthId StartDate EndDate 1 20150101 20150199 2 20150201 20150299 3 20150301 20150399 . . . 24 20161201 20161299

如果您只是想要一个月的第一天(如果您想加入转换完整日期需要不同的时间表,那么请执行此操作,但此示例在iPad上可以轻松写入并且可以展开):

select 
  t2.startdate, 
  y.* 
from yourtable y
Join timetab t1
  on y.dateAsInt between t1.StartDate and t1.EndDate
Join t2 
  On t1.monthid=t2.monthid-6