我正在尝试编写一个查询来生成自动报告。此报告将针对上个月应该在每月1日运行的交易运行。我有工作来运行这个报告,每月1日运行。但是如何让这个查询在一个月内选择一天? (某些月份将有30个,有些将有31个,并且根据闰年,没有天数变化)。 这里还有一个要求是我只需要在查询中传递一个参数。下面是我现在的查询示例
select id,name,address,trans_dt from tab1 where trans_dt between to_date('&1','MM-DD-YYYY')-30 AND to_date('&1','MM-DD-YYYY');
以上查询生成最近30天的交易,但如果没有月份的日期是31或28,那将是错误的。我使用oracle 11r2作为数据库。请帮忙写这个。
答案 0 :(得分:0)
mySQL的
SELECT
id,
NAME,
address,
trans_dt
FROM
tab1
WHERE
MONTH(trans_dt) = 02 /* Param for month passed in */
AND
YEAR(trans_dt) = YEAR(CURDATE())
的Oracle
SELECT
id,
NAME,
address,
trans_dt
FROM
tab1
WHERE
to_char( dt_column, 'mm' ) = 02 /* Param for month passed in */
AND
EXTRACT(YEAR FROM DATE trans_dt) = trunc(sysdate, 'YEAR')
也许这可行吗?我只知道mySQL
答案 1 :(得分:0)
找到解决方案,但忘了在这里回复。这是我的解决方案
select id,name,address,trans_dt from tab1 where trans_dt between trunc(trunc(sysdate,'MM')-1,'MM') and trunc(sysdate,'MM');
上面的将为您提供从日历到月份的最后一天的报告。
答案 2 :(得分:0)
select id
,name
,address
,trans_dt from tab1
where trans_dt between to_date(p_dt,'yyyy-mmm-dd') and add_months(to_date(p_dt,'yyyy-mmm-dd'))