我在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的日期数据结构被强制为'YYYY-MM-DD‘格式,所以我想我必须将我所有的月份都附加到'YYYY-MM-01’中,这样"01“就代表了整个月的总和。
有没有可能执行一个oracle查询,将-01附加到所有我的日期,这样它们就可以正确地通过管道传输到MySQL表?
发布于 2012-07-25 05:32:42
您可以使用一个简单的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“格式?
发布于 2012-07-25 05:52:23
通常,使用TRUNC函数将日期截断到月初会更有意义(也更有效)。结果值的类型为DATE。
SELECT trunc(dateid, 'MM' ) thedate, count(*)
FROM picture_table
GROUP BY trunc(dateid, 'MM')
ORDER BY 1, 2您在问题中所说的“MySQL管道端”是什么意思并不明显。我假设无论您使用什么工具将数据从Oracle移动到MySQL,都能够正确地处理将Oracle DATE映射到MySQL DATE或DATETIME。如果必须将Oracle中的日期转换为特定格式的字符串,只是为了让MySQL将该字符串隐式转换回DATE,这似乎非常不寻常。
发布于 2012-07-25 05:43:27
您可以在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
https://stackoverflow.com/questions/11639606
复制相似问题