【问题标题】:How to format a Vertica date column into just the month?如何将 Vertica 日期列格式化为月份?
【发布时间】:2014-02-05 22:20:47
【问题描述】:

我正在尝试将 Vertica 日期列格式化为仅月份。

我需要某种日期数据类型的最终值,因此在报告中我可以按日期/时间排序结果,而不是按文本排序。所以二月排序在一月之后等等。

select TO_DATE(TO_CHAR(purchase_date), 'Month')  
from transactions
order by 1;

我也试过了:

select TO_DATE(TO_CHAR(MONTH(purchase_date)), 'Month')  
from transactions
order by 1;

以上语句产生错误“Invalid value for Month”

有什么想法吗?

【问题讨论】:

  • 你能举例说明你想要得到的输出吗?
  • 为什么要尝试将单个“月份”转换回日期?那没有意义。另一个选项可能是extract(month from purchase_date),它是 ANSI SQL,但我不知道 Vertica 是否支持它。
  • @Gordon Linoff
    1 月 - 10 次销售
    2 月 - 20 次销售
  • @a_horse_with_no_name,所以行按月/日顺序排序
  • 一般来说,对于格式化问题,Vertica 的处理方式与 PostgreSQL 相同。因此,如果您找不到 Vertica 的答案,请在 Internet 上搜索它是如何在 PostgreSQL 中完成的,它很可能是正确的答案。

标签: sql vertica


【解决方案1】:

这个怎么样?

select to_char(purchase_date, 'Month')
from transactions
order by purchase_date;

您可以按不在select 列表中的列排序。

编辑:

如果您想结合多年的月份,上述方法将无法正常工作。这将:

select to_char(purchase_date, 'Month')
from transactions
order by extract(month from purchase_date);

【讨论】:

  • 投反对票的不是我,我不知道是谁投的。
  • @davidjhp 。 . .那不是我的问题。这种方法对你有用吗?
  • @davidjhp 。 . .不是按to_char()的结果排序,而是按原日期排序。
  • 实际查询是一个很大的group by statement,我为SO高度简化了,但真正的查询更大。 PS感谢您的努力。
【解决方案2】:
Select TO_CHAR((NOW() - INTERVALYM '1 MONTH'), 'MON');

输出:

JUN

这将帮助您仅获取上个月的名称。

【讨论】:

    【解决方案3】:

    我们可以直接使用 date_part 从时间戳中获取月份。

    SELECT DATE_PART('MONTH', purchase_date) purchase_date
    

    TO_DATE 给出完整日期,如果您在参数中仅提供 MM,则 Vertica 设置默认年份和日期。

    假设月份是 8。

    SELECT TO_DATE(purchase_date, 'MM')
    

    输出:(0001-08-01)

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多