需要 SQL 逻辑
- 如果我输入 sys date 作为 15th,它必须从 1-15 获取值。
- 如果我输入日期为下个月的第二个月,它必须从 15 日到 2 日。
例子
Sys date April 15th - April 1 to April 15th date values needs to be fetch.
Sys date May 2nd - April 15th to May 2nd date values needs to be fetch.
请建议
我建议使用 DAYOFWEEK() 和 MONTH() 函数来确定查询的开始和结束日期。
SET @day = DAYOFMONTH(<date entered>)
SET @month = MONTH(<date entered>)
IF @month > MONTH(NOW()) AND @day = 2 THEN
SET @start_date = DATE_SUB(<date entered>, INTERVAL 1 MONTH) + INTERVAL 13 DAY
SET @end_date = <date entered>
ELSEIF @month = MONTH(NOW()) AND @day = 15 THEN
SET @start_date = DATE_SUB(<date entered>, INTERVAL 14 DAY)
SET @end_date = <date entered>
END IF;
SELECT * FROM myTable WHERE myDate BETWEEN @start_date AND @end_date
因此,作为一种通用方法,您需要一个函数来返回月份中的天数,并且两个 case 语句分别返回一个特定的日期作为边界。日期算术用于将系统日期转换为所需的上限和下限,因此在 Oracle 上,您将使用 Trunc(sysdate,'mm') 和 add_months(...,n) 并将天数添加为整数。
日期函数在这里:http ://docs.oracle.com/cd/B28359_01/server.111/b28286/functions001.htm
无法帮助您处理 MySQL 函数——毫无疑问,它们已记录在某处。
你最终会...
date_col > case <function on sysdate>
when < 15 then <function for lower bound case 1>
when < 15 then <function for lower bound case 2>
end and
date_col < case <function on sysdate>
when < 15 then <function for upper bound case 1>
when < 15 then <function for upper bound case 2>
end and