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

Calculate previous and next months from date string

我正在尝试查找 3 年内 select 个月前后的平均销售额。

有两列,MONTHSELECTED_MONTH。这两个都采用相同的格式,即字符串(例如 201103)。我需要 select SELECTED_MONTH 中的特定月份,并在 MONTH 中获取该月的上个月和下个月。

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

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

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

如果您碰巧在 SQL table 中有一个名为 month 的文本列,其文本日期格式为 201503YYYYmm), 你可以使用 MySQL 日期算法来做你想做的事情。

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

生成所提及月份第一天的 DATE。

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

生成 month 最后一天的日期。

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

产生上个月第一天的 DATE。

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

产生下个月第一天的 DATE。

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

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

在文本字符串日期和内部日期之间进行转换的麻烦事驱使大多数数据库设计者将日期值存储在具有 DATE 数据类型的内部列中。