我想查找Patient.dob - 20
和patient.dob -30
(以年爲單位)之間的所有Patients.dob
。查找匹配2個日期操作之間的匹配
我使用的是Oracle 10g,並試圖使用dateAdd
,並試圖用SYSTIME - 12*30
代替,但兩者都不起作用。
數據加載正常,並且應該是日期格式。
這怎麼辦?
我想查找Patient.dob - 20
和patient.dob -30
(以年爲單位)之間的所有Patients.dob
。查找匹配2個日期操作之間的匹配
我使用的是Oracle 10g,並試圖使用dateAdd
,並試圖用SYSTIME - 12*30
代替,但兩者都不起作用。
數據加載正常,並且應該是日期格式。
這怎麼辦?
您可以提取年份和做之間的(但這種方式只得到一年的差別,沒有必要確切的20-30歲差)
with datam as
(
select level id, sysdate - level dob
from dual
connect by level < 15000)
select count(id) count_id , extract(year from dob)
from datam
where extract(year from dob) between 2011-30 and 2011-20
group by extract(year from dob)
order by 2 desc
但是,忽略閏年(這是你試圖用12 * 30的事,它應該是365 * 12)
with datam as
(
select level id, sysdate - level dob
from dual
connect by level < 15000)
select count(id) count_id , extract(year from dob)
from datam
where dob between (sysdate - 365*30) and (sysdate - 365*20)
group by extract(year from dob)
order by 2 desc ;
但是@ Briguy37也可以工作:
with datam as
(
select level id, sysdate - level dob
from dual
connect by level < 15000)
select count(id) count_id , extract(year from dob)
from datam
where dob between add_months(dob,- 12*30) and add_months(sysdate,- 12*20)
group by extract(year from dob)
order by 2 desc ;
您可以使用ADD_MONTHS做到這一點:
select * from patient p
where
add_months(p.dob,30 * 12) > current_date and
add_months(p.dob,20 * 12) < current_date;
注意:它不能直接進行相減的原因是因爲該計算以天計算。 – Briguy37 2011-05-13 18:54:20
難道你不想要常量的負值嗎?例如,add_months(p.dob,-20 * 12) – DCookie 2011-05-13 20:52:21
@DCookie如果你舉出一個在01/01/1990出生的人的例子,他們目前是21歲,因此這個陳述對他們來說應該是真實的。分別增加20和30年會給你01/01/2010和01/01/2020,而2011年5月13日的當前日期是在這些日期之間,所以它是成立的。如果您正在執行當前日期的操作,則需要減去此值,例如idkWATimDOIN正在處理該問題。 – Briguy37 2011-05-13 21:46:52
真棒謝謝很多人 – idkWATimDOIN 2011-05-13 22:22:10
是否有任何理由爲什麼此代碼: WHERE add_months(「Patients」。「Patient_DOB」,-30 * 12)<=「Patients」。「Patient_DOB」AND add_months(「Patients」。「Patient_DOB 「,-20 * 12)> =」患者「。」Patient_DOB「; 返回沒有找到數據?並有價值目前,shud被退回 – idkWATimDOIN 2011-05-13 22:44:48
nvm我得到了它對不起,長了一天大聲笑 – idkWATimDOIN 2011-05-13 22:50:40