我手上有问题。我正在开发一个应用程序,用户希望将愿望卡发送给其生日在用户提供的 FROM 和 TO date 之内的客户,无论年份如何。即搜索结果应仅基于月份和日期。例如,我的输入参数来自日期:“12/05”(12 月 5 日)和截止日期:“01/04”(1 月 4 日)。请帮忙。提前致谢
问问题
1774 次
3 回答
1
您可以使用 PLSQL 的提取功能:
extract(MONTH FROM DATE '2003-08-22') would return 8
extract(DAY FROM DATE '2003-08-22') would return 22
于 2012-12-05T11:49:58.573 回答
0
您应该使用此查询条件。它选择birthdate
从现在起是否在一个月的间隔内。生日可以是任何年份:
where
TO_DATE(TO_CHAR(birthdate,'dd.mm')||'.1900','DD.MM.YYYY') ,
between
TO_DATE(TO_CHAR(sysdate,'dd.mm')||'.1900','DD.MM.YYYY')
and ADD_MONTHS(TO_DATE(TO_CHAR(sysdate,'dd.mm')||'.1900','DD.MM.YYYY'),1)
如果用户输入日期范围,例如“02/03”和“23/06”(此查询中的“P1”和“P2”),则使用以下条件。
where
(
TO_DATE(TO_CHAR(birthdate,'dd.mm')||'.1900','DD.MM.YYYY') ,
between
TO_DATE('P1'||'.1900','DD.MM.YYYY')
and
TO_DATE('P2'||'.1900','DD.MM.YYYY')
)
OR
(
(TO_DATE('P1'||'.1900','DD.MM.YYYY')
> TO_DATE('P2'||'.1900','DD.MM.YYYY') )
and
(
TO_DATE(TO_CHAR(birthdate,'dd.mm')||'.1900','DD.MM.YYYY') ,
between
TO_DATE('P1'||'.1900','DD.MM.YYYY')
and
TO_DATE('31.12.1900','DD.MM.YYYY')
OR
TO_DATE(TO_CHAR(birthdate,'dd.mm')||'.1901','DD.MM.YYYY') ,
between
TO_DATE('01.01.1901','DD.MM.YYYY')
and
TO_DATE('P2'||'.1901','DD.MM.YYYY')
)
)
于 2012-12-05T12:01:33.163 回答
0
假设您已将 DOB 存储为 DATE,可以在表 PPL 中说 column = "DOB"。
即对于原始集:
FIRSTNAME LASTNAME DOB
-------------------------------- -------------------------------- ---------
Joe Bloggs 03-JAN-90
Jane Doe 05-JAN-40
Adam West 05-DEC-76
我们得到
SQL> select firstname, lastname, dob, next_bday
2 from (select firstname, lastname, dob,
3 case when to_date(to_char(dob, 'mmdd'), 'mmdd') < trunc(sysdate)
4 then add_months(to_date(to_char(dob, 'mmdd'), 'mmdd'), 12)
5 else to_date(to_char(dob, 'mmdd'), 'mmdd')
6 end next_bday
7 from ppl)
8 where next_bday < add_months(trunc(sysdate), 1);
FIRS LASTNA DOB NEXT_BDAY
---- ------ --------- ---------
Joe Bloggs 03-JAN-90 03-JAN-13
Adam West 05-DEC-76 05-DEC-12
于 2012-12-05T12:11:44.070 回答