【问题标题】:Oracle: group by monthOracle:按月分组
【发布时间】:2015-06-04 12:25:34
【问题描述】:

我有这样的问题,我正在使用 Oracle 数据库。在我的一张表中有一个时间戳格式的列,例如06.01.14 08:54:35 我必须通过仅按月份对该列进行分组来选择一些数据。 如果06.01.14 列的查询结果必须是Jan.2014 MM.YYYY 格式,我试过这样的查询

SELECT to_char(ctime,'mm.yyyy') from table_name

但结果不是日期格式,是字符串格式。我不能用to_date 函数来做到这一点

你能帮帮我吗

【问题讨论】:

标签: oracle date-format


【解决方案1】:

如果ctimeTIMESTAMP 类型:

SELECT EXTRACT(month from ctime) "month" from table_name

编辑:如果你想要像“Jan - 2014”这样的月份和年份,我想你所需要的只是:

SELECT TO_CHAR(ctime, 'FMMon - YYYY') from table_name

(见http://www.techonthenet.com/oracle/functions/to_char.php

如果ctime 是一个字符串(例如输入VARCHAR),您需要先转换为时间戳(如上所示,替换为ctime,替换为TO_TIMESTAMP(ctime, "MM.DD.YY HH:MM:SS")

HTH

【讨论】:

  • 谢谢你的回复,但是这个查询只给出了几个月,我需要像Jan - 2015这样的年份
  • 然后问正确的问题。这里的方法是合理的。您要求按only month 分组以按年分组,只需添加extract (year from ctime) "year" 并按月和年分组。
  • @Faradox 这就是您要找的东西吗? (如果是,请接受)
  • 我需要结果必须是日期格式。你的例子给出了字符串格式。
  • @Faradox 那么你应该SELECT ctime from table_name,... (whatever aggregate function you're trying to do goes here)... GROUP BY TO_CHAR(ctime, 'FMMon - YYYY') 或类似的。在 SO 上,最好先明确您正在寻找什么(注意您的问题指定了类似字符串的结果格式)并愿意概括人们试图为您的特定用例提供的解决方案.
【解决方案2】:

当然,to_char 的任何变化都会产生字符串格式。这就是它的作用。我认为您混淆了值的显示方式及其背后的数据类型。

现在,如果您有一个 DATE 字段,那么您可以使用

TRUNC(cTime,'MON')

这将截断到本月的第一天并保留为日期格式。如何显示它取决于您。但是,如果您希望 DATE 值没有日/时/分/秒组成部分 - 那么恐怕您不了解数据类型。

【讨论】:

  • 谢谢迈克尔,这就是我想要的。我根据自己的喜好展示了它:))
  • 另外,table的column是时间戳类型,你说的day/hour/minute/second不用担心
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多