从日期字符串计算上个月和下个月

时间:2015-06-27 05:45:57

标签: mysql sql datetime hive date-arithmetic

我试图在3年的时间内找到选定月份之前和之后的销售平均值。

有两列,MONTHSELECTED_MONTH。这两种格式都是字符串格式(例如201103)。我需要在SELECTED_MONTH中选择特定月份,并在MONTH中获取该月的上个月和下个月。

例如:我在201103中有SELECTED_MONTH。我需要使用该值在MONTH中获取上一个月和下个月,因此201102201104

任何帮助将不胜感激。我尝试了不同的方法。我使用HIVE,但即使是SQL中的查询也会有所帮助。

1 个答案:

答案 0 :(得分:0)

MySQL提供功能强大但略显笨重的日期算术功能。函数STR_TO_DATE()DATE_FORMAT()允许从表示为文本字符串的日期转换为DBMS的内部DATEDATETIME格式。

如果碰巧在SQL表中有一个文本列,例如month,其文本日期为201503YYYYmm),您可以使用MySQL日期算术做你想做的事。

STR_TO_DATE(CONCAT(month,'01'),'%Y%m%d') 

生成所述月份第一天的日期。

LAST_DAY(STR_TO_DATE(CONCAT(month,'01'),'%Y%m%d')) 

生成month的最后一天的日期。

STR_TO_DATE(CONCAT(month,'01'),'%Y%m%d') - INTERVAL 1 MONTH

生成前一个月第一天的日期。

STR_TO_DATE(CONCAT(month,'01'),'%Y%m%d') + INTERVAL 1 MONTH

生成下个月第一天的日期。

再进一步,您可以像上一样获得上一季度第一天的YYYYmm格式。

DATE_FORMAT(STR_TO_DATE(CONCAT('201505','01'),'%Y%m%d') - INTERVAL 1 QUARTER, '%Y%m')

在文本字符串日期和内部日期之间进行转换的猴子业务驱动大多数数据库设计者在内部存储具有DATE数据类型的列的日期值。