我试着看看一个人的生日是否在两个日期内,基于他们的出生日期,而不是出生的年份。
到目前为止,我正在尝试“ddd”选项,获取一年中的日期。但我注意到我的代码似乎忽略了任何出生在一年的12月31日的人,因此得到了不正确的结果。我尝试添加一个1,但这也没有帮助。以下是我到目前为止所尝试的:
select emp.employee_number,
person.title,
person.surname,
person.first_forname,
addr.line_one ||' '|| addr.line_two ||' '|| addr.line_three ||' '|| addr.line_four ||' '||
addr.postcode as Address,
post.long_desc as LONG_DESC,
email.email_address,
per.pers_mobile_tel_no as mobile_no
from person per
inner join emp emp on per.person_ref=emp.person_ref
inner join addr addr on per.address_ref= addr.ref
inner join ph ph on emp.person_ref=ph.person_ref
inner join post post on ph.ref=post.ref
inner join pl pl on pl.post_ref= post.ref
where
to_char( ( TO_DATE(person.birth_date,'DD-MM-YYYY')) , 'ddd' ) >=
to_char( ( TO_DATE(:Start_Date,'DD-MON-YYYY')) , 'ddd' )
AND
to_char( ( TO_DATE(person.birth_date,'DD-MM-YYYY')) , 'ddd' ) <=
to_char( ( TO_DATE(:End_Date,'DD-MON-YYYY')) , 'ddd' )
and
ph.end_date is null
and loc.location_number in ('501')
order by emp.employee_number
在这方面的任何帮助都将不胜感激。提前谢谢。
发布于 2014-04-28 19:14:44
由于以下条件,您的查询在12月31日会出现错误:
to_char( ( TO_DATE(person.birth_date,'DD-MM-YYYY')) , 'ddd' ) >=
to_char( ( TO_DATE(:Start_Date,'DD-MON-YYYY')) , 'ddd' )
AND
to_char( ( TO_DATE(person.birth_date,'DD-MM-YYYY')) , 'ddd' ) <=
to_char( ( TO_DATE(:End_Date,'DD-MON-YYYY')) , 'ddd' )
在这两种情况下,您都可以使用less或equal和more or equal。它应该是
to_char( ( TO_DATE(person.birth_date,'DD-MM-YYYY')) , 'ddd' ) >
to_char( ( TO_DATE(:Start_Date,'DD-MON-YYYY')) , 'ddd' )
AND
to_char( ( TO_DATE(person.birth_date,'DD-MM-YYYY')) , 'ddd' ) <=
to_char( ( TO_DATE(:End_Date,'DD-MON-YYYY')) , 'ddd' )
或
to_char( ( TO_DATE(person.birth_date,'DD-MM-YYYY')) , 'ddd' ) >=
to_char( ( TO_DATE(:Start_Date,'DD-MON-YYYY')) , 'ddd' )
AND
to_char( ( TO_DATE(person.birth_date,'DD-MM-YYYY')) , 'ddd' ) <
to_char( ( TO_DATE(:End_Date,'DD-MON-YYYY')) , 'ddd' )
编辑:
查询似乎不能解决您的问题。例如,假设出生日期是1990年12月31日,开始日期是1990年6月01日,结束日期是1991年2月01日。当你得到'ddd‘时,你的生日是365,开始日期是152,结束日期是32。但是,32小于152,因此您不会得到输出中包含31.12.1990的person。因此,与'ddd‘值进行比较是不正确的,因为它忽略了年份值。相反,您应该将整个日期相互比较,如下所示:
TO_DATE(person.birth_date,'DD-MM-YYYY') >=
TO_DATE(:Start_Date,'DD-MON-YYYY')
AND
TO_DATE(person.birth_date,'DD-MM-YYYY') <
TO_DATE(:End_Date,'DD-MON-YYYY')
https://stackoverflow.com/questions/23349200
复制