我處理患者資訊,其中包含入院日期和出院日期。我有一個查詢,我需要添加一個 WHERE 子句,該子句只能識別日期范圍內的患者。
例如,我想將所有住院的患者從 5-1-2021 拉到 5-31-2021。這將包括在 5 月的任何時間點入院/出院(以及介于兩者之間)的患者。
Hospital 1
Patient Admit_Date Disch_Date
1 4/5/2021 5/20/2021
2 5/6/2021 5/10/2021
3 4/10/2021 4/22/2021
4 4/19/2021 7/5/2021
5 6/1/2021 6/7/2021
我只想包括從 2021 年 5 月 1 日到 2021 年 5 月 31 日在 1 號醫院的患者,因此它會生成以下表格:
Hospital 1
Patient Admit_Date Disch_Date
1 4/5/2021 5/20/2021
2 5/6/2021 5/10/2021
4 4/19/2021 7/5/2021
我嘗試使用 BETWEEN 子句,但它不包括像患者 #4 這樣的患者,他們在 5 月之前入院,5 月之后出院,但在 5 月住院。基本上我正在嘗試進行人口普查,所以我可以說在 5 月 4 日或 5 月 22 日等有 XX 名患者,但在整個 5 月(或任何月份)。
謝謝!!!
uj5u.com熱心網友回復:
您可能想選擇在月底之前入院并在月初之后出院的任何人 在您的 where 子句中使用類似的內容
where
Admit_Date <= '2021-05-31' and
Disch_Date >= '2021-05-01'
uj5u.com熱心網友回復:
對于在 5 月內入院的持續時間,入院必須在 5 月底之前開始,并在 5 月初之后結束。這“感覺”不對,但如果你自己用筆和紙畫出時間線,你可以看到它的邏輯。
那么必要的查詢是:
SELECT * FROM admissions
WHERE admit_date <= "2021-05-31"
AND disch_date >= "2021-05-01";
uj5u.com熱心網友回復:
tl;博士
SELECT *
FROM event_
WHERE start_ < '2021-06-01'
AND end_ !< '2021-05-01'
;
半開
通常最好將時間跨度定義為半開放,其中開始是包容性的,而結束是獨占性的。因此,5 月份從 5 月 1 日開始,一直到(但不包括)6 月 1 日。
避免 BETWEEN
千萬不能使用SQL命令BETWEEN進行這項作業。該命令是完全關閉而不是半打開。
重疊測驗
您的目標涉及重疊測驗,其中行的日期范圍既不完全早于目標日期范圍,也不完全晚于目標日期范圍。換句話說,這兩個范圍共享時間線的某些部分。
所以邏輯是:
- 行開始在目標結束之前,并且
- 行結束等于或晚于目標開始。
在標準 SQL 代碼中:
SELECT *
FROM event_
WHERE start_ < '2021-06-01'
AND end_ >= '2021-05-01'
;
“等于或晚于”的另一種說法是“不之前”。!<盡管 SQL 標準中可能未定義該運算子,但某些資料庫支持使用。
SELECT *
FROM event_
WHERE start_ < '2021-06-01'
AND end_ !< '2021-05-01'
;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/390163.html
上一篇:如何計算日期范圍是否在本周內
