所以我在一個使用 MySQL 的網站上作業,在reminders表中我有 3 列,分別稱為date、date_to和yearly。日期存盤為例如 2022-06-15。
例如,如果有一個yearly = 1提醒,date并且date_to是 2021-06-14 和 2021-06-16,我該如何看待 BETWEENdate以及date_to如果我需要使用 LIKE,因為有時我需要使用該-06-15部分,因為它是yearly = 1?
我有時需要使用-06-15,因為如果它是年度提醒,我也不能只檢查年份,因為它意味著每年都會重復。
表格示例:
| date | date_to | yearly |
| -----------| -------------- | ------ |
| 2021-06-14 | 2021-06-16 | 1 |
| 2022-05-03 | 2022-05-04 | 0 |
搜索日期 06-15 的年度提醒后的預期輸出:
| date | date_to | yearly |
| -----------| -------------- | ------ |
| 2021-06-14 | 2021-06-16 | 1 |
uj5u.com熱心網友回復:
如果我正確理解您的問題,您只想檢查您的日期是否在表的起始日期和結束日期之間。這基本上可以用這個查詢來完成:
SELECT date_from, date_to, yearly
FROM yourtable
WHERE '2021-06-15' BETWEEN date_from AND date_to;
如果您不關心年份,而只想檢查日期,則可以DATE_FORMAT這樣使用:
SELECT date_from, date_to, yearly
FROM yourtable
WHERE DATE_FORMAT('2021-06-15', "%m-%d")
BETWEEN DATE_FORMAT(date_from, "%m-%d")
AND DATE_FORMAT(date_to, "%m-%d")
那么無論出現哪一年(在本例中為 2021 年)都無關緊要,只檢查日期。
還可以提到的是,MYSQL 還提供了一個函式,該函式DAYOFYEAR在大多數情況下可以正常作業,如下所示:
SELECT date_from, date_to, yearly
FROM yourtable
WHERE DAYOFYEAR('2021-06-15')
BETWEEN DAYOFYEAR(date_from) AND DAYOFYEAR(date_to);
這也將忽略年份并僅檢查日期。它更容易閱讀,但不太安全,因為當涉及滯后年份時它可能會失敗,因為那時一年中的一天將比其他年份多一個。
請注意,我在回答中將“您的”列“日期”的名稱更改為“date_from”。這沒有錯,但我建議不要使用 SQL 關鍵字或函式名作為表名或列名。此外,列名“date_from”更好地指出了與列“date_to”的區別,因此您應該盡可能重命名該列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/491398.html
