我有YYYY-MM
格式的日期列表,並且我有一個表格,其中包含starts_at
和ends_at
列的記錄。MySQL:IN子句的開始日期和結束日期之間的日期?
我想要查找傳入列表中的任何給定日期在starts_at
和ends_at
範圍內的所有記錄。
因此,鑑於2011-01, 2011-05, 2011-10
,我想:
| id | starts_at | ends_at | title |
| 3 | 2010-12-05 00:00:00 | 2011-02-02 00:00:00 | something cool |
| 4 | 2011-03-14 00:00:00 | 2011-05-01 00:00:00 | something else really cool |
| 5 | 2011-10-31 00:00:00 | 2012-12-23 00:00:00 | argh! end of the world! not cool! |
...而這些記錄將被省略:
| id | starts_at | ends_at | title |
| 6 | 2010-10-05 00:00:00 | 2010-12-02 00:00:00 | something uncool |
| 7 | 2011-03-14 00:00:00 | 2011-04-31 00:00:00 | something else really uncool |
| 8 | 2011-12-23 00:00:00 | 2013-01-01 00:00:00 | yay! we're still alive! cool! |
我怎麼會寫在SQL這WHERE
條件?
澄清:我正在尋找在純SQL(通過一些其他語言如PHP的解決方案,我用存儲過程的工作,所以動態注入是不是真的有可能,只要我知道),並將日期列表作爲string
(HTML表單輸入)傳遞給查詢。我很樂意將它分解爲連續的BETWEEN
語句,如果我可以用SQL編程的話,但我不知道該怎麼做。
基本上,我需要一種方法來表達純粹的SQL以下邏輯:
$months = explode(',', '2011-01,2011-05,2011-10');
$q = "SELECT records.* FROM records WHERE";
foreach($months as $month) {
$q .= " '$month' BETWEEN records.starts_at AND records.ends_at OR";
}
$q = substr($q, 0, -3) . ';';
啊'BETWEEN'!pwnage> _ <+1 –
不完全是我之後...日期列表是傳遞給查詢的字符串,不是作爲單個變量......類似這樣的:'WHERE record.an_imaginary_date_field IN(2011-01,2011-05,2011-10)'......除非SQL中有解析該字符串以獲取單獨值的方法嗎? – neezer
@neezer:這可能是最好的解析它來分離客戶端的值。 –