0

需要 SQL 逻辑

  1. 如果我输入 sys date 作为 15th,它必须从 1-15 获取值。
  2. 如果我输入日期为下个月的第二个月,它必须从 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.

请建议

4

2 回答 2

0

我建议使用 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
于 2013-05-03T06:48:13.117 回答
0

因此,作为一种通用方法,您需要一个函数来返回月份中的天数,并且两个 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
于 2013-05-03T06:43:27.810 回答