1

我在 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 表?

4

3 回答 3

2

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到 MySQLDATEDATETIME. 如果您必须将 Oracle 中的日期转换为特定格式的字符串,以便让 MySQL 将该字符串隐式转换回DATE.

于 2012-07-24T21:52:22.857 回答
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

于 2012-07-24T21:43:26.710 回答
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”格式?

于 2012-07-24T21:32:42.450 回答