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

Sql 将月份添加到数字YMD格式的有效方法?,sql,netezza,Sql,Netezza,我目前正忙于一些SQL(在Netezza和HiveQL中)。我们公司经常使用数字字段表示日期(例如,日期为20150602,月份为20160400) 我需要在其中一个日期后再加上6个月,通常我会: cast(to_char(add_months(to_date(A.date,'yyyyMMdd'),6),'yyyyMMdd') as int) 虽然这并不漂亮,但它很管用,我不知道有什么更短或更好的方法。我的主要问题是,这是一个很大的表(120亿行),日期转换不是很快,我正在处理的查询由于运行

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

我需要在其中一个日期后再加上6个月,通常我会:

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

虽然这并不漂亮,但它很管用,我不知道有什么更短或更好的方法。我的主要问题是,这是一个很大的表(120亿行),日期转换不是很快,我正在处理的查询由于运行时间过长而被终止。有更好的方法吗?

我会尝试使用以下列(全部为int)连接到时间维度表:

蒙希德开始日期结束日期
1       20150101  20150199
2       20150201  20150299
3       20150301  20150399
.
.
.
24     20161201  20161299

然后,如果您只想在每月的第一天这样做(如果您想加入转换完整日期,则需要不同的时间表,但此示例更易于在iPad上编写,并且可以扩展):


我将尝试使用以下列(全部为int)连接到时间维度表:

蒙希德开始日期结束日期
1       20150101  20150199
2       20150201  20150299
3       20150301  20150399
.
.
.
24     20161201  20161299

然后,如果您只想在每月的第一天这样做(如果您想加入转换完整日期,则需要不同的时间表,但此示例更易于在iPad上编写,并且可以扩展):


这些字段的数据类型是什么?你在哪个版本的蜂巢上?这不是蜂巢code@Dudu:你说得对,是Netezza。问题仍然存在。@Vamsi:Datatype为int。配置单元版本为1.2.1000.2.5.3.0-37与配置单元相关的标记已删除。如果你想问一个与蜂巢相关的问题,打开一篇新的帖子。这些字段的数据类型是什么?你在哪个版本的蜂巢上?这不是蜂巢code@Dudu:你说得对,是Netezza。问题仍然存在。@Vamsi:Datatype为int。配置单元版本为1.2.1000.2.5.3.0-37与配置单元相关的标记已删除。如果你想问一个与蜂巢相关的问题,请打开一个新的帖子。
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