Oracle Date Aggregating

时间:2012-07-24 21:30:06

标签: mysql sql oracle

我在Oracle中有一个表,它每天都有值。

我的目标是让这张表显示每月的价值总和而不是每日。

我使用此查询完成了此操作:

select to_char(dateid, 'YYYY-MM') as thedate, count(*)
from picture_table
group by to_char(dateid, 'YYYY-MM')
order by 1, 2

这里的问题是我必须将这个oracle表转移到MySQL中的表中。由于MySQL的DATE数据结构被强制为'YYYY-MM-DD'格式,我想我必须将我所有的月份都追加到'YYYY-MM-01',以便“01”代表整个一个月。

是否可以执行oracle查询以将-01附加到我的所有日​​期,以便可以正确地将它们流水线化到MySQL表?

3 个答案:

答案 0 :(得分:2)

使用TRUNC函数将日期截断到本月的第一天通常会更有意义(并且效率更高)。结果值的类型为DATE

SELECT trunc(dateid, 'MM' ) thedate, count(*)
  FROM picture_table
 GROUP BY trunc(dateid, 'MM')
 ORDER BY 1, 2

在您的问题中,“pipeliend to MySQL”的含义并不明显。我假设无论您使用什么来将数据从Oracle移动到MySQL,都能够正确处理Oracle DATE到MySQL DATEDATETIME的映射。如果你不得不将Oracle中的日期转换为特定格式的字符串,只是为了让MySQL执行该字符串的隐式转换回DATE,这似乎很不寻常。

答案 1 :(得分:1)

你可以用一个简单的concat来做到这一点:

select to_char(dateid, 'YYYY-MM')||'-01' as thedate, count(*)
from picture_table
group by to_char(dateid, 'YYYY-MM')
order by 1, 2

但是,为什么mysql表使用日期字段?它可以只有一个varchar()列来接受“yyyy-mm”格式吗?

答案 2 :(得分:1)

你可以在MySQL中格式化相同的日期,你只需要一个不同的功能:

select date_format(dateid, '%Y-%m') as thedate, count(*)
from picture_table
group by date_format(dateid, '%Y-%m')
order by 1, 2

示例在这里:http://sqlfiddle.com/#!2/af6bd/2

date_format()函数的说明:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format