我在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表?
答案 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 DATE
或DATETIME
的映射。如果你不得不将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