2009-09-08 166 views
2

我想寫一條查詢來查找我的'schedule_items'表中與DATETIME字段的值YYYY-MM-DD匹配的所有項目。查詢以查找部分匹配

類似:SELECT * FROM schedule_items WHERE開始?matches? '$date'

的地方開始將是一個DATETIME場數據,如2009-09-23 11:34:00$date會是這樣的:2009-09-23

我能做到這一點還是需要加載所有的值,然後爆炸和比較我的DATETIME start字段中的值?

回答

6

您可以像使用MySQL中

SELECT * FROM schedule_items WHERE start LIKE 'some-date%' 

你把一個%符號作爲通配符。

請注意,雖然這可能是一個非常沉重的查詢。特別是如果你在字符串的開頭使用%。

+0

什麼行的金額將它變得沉重的? – ian 2009-09-08 18:50:46

+1

這取決於系統。如果你擔心。再看看慢查詢日誌(如果您有它) – 2009-09-08 19:04:05

1

在SQL中,您可以使用LIKE而不是=,然後獲得%通配符。例如:

select ... where start like "2009-09-%"; 

(這會從2009年8月與任何內容匹配)

+0

所以我的約會我想匹配是2009-10-09或任何存儲在$ YMD可以做我喜歡「$ YMD%」 – ian 2009-09-08 18:55:30

+0

是的,這應該工作。只要確保你將mysql_real_escape_string()放入SQL之前從用戶那裏獲得的任何東西。 – JasonWoof 2009-09-08 19:08:18

2

如果您正在使用日期,喜歡它似乎你說:

的地方開始將是一個DATETIME場 與數據一樣2009-09-23 11:34:00和 $日期將類似於 2009-09-23

使用LIKE可能不是唯一/最好的解決方案:有處理日期的函數;你也可以使用比較運算符。

在你的情況,你也許可以用這樣的:

select * 
from headers_sites 
where date_fetch >= '2009-07-15' 
limit 0, 10 

當然,你必須去適應這個查詢到你的表/場;這樣的事情可能會做,我想:

SELECT * FROM schedule_items WHERE start >= '$date' 

這會讓你獲得日期比$ date更近的每個數據。

如果你只想要一個一天的日期,這可以這樣做:

SELECT * 
FROM schedule_items 
WHERE start >= '$date' 
    and start < adddate('$date', interval 1 day) 

這可能是比「贊」好,如果你開始列有索引 - 不知道,雖然,但是,仍然,你願意從你的查詢中明白你的意思......那很好。

+0

我可以這樣做:SELECT * FROM'schedule_items' WHERE'start' ='$ ymd'event雖然肯定... $ ymd將是YYYY-MM-DD並且..'start'將會是YYYY-MM-DD 00:00:00 – ian 2009-09-08 19:54:55

+0

不,您不能:正如您所說,=號的一側將有00:00:00;你會比賽的第二個基礎,而不是一天 - 即,你不會匹配太多。 – 2009-09-08 19:56:24

0

如果需要從時間字段提取日期的記錄,您需要使用以下格式:

SELECT * FROM schedule_items WHERE date(start) = 'some-date time'

+0

嗨LittlePanda,只需要問你編輯了什麼?它看起來和我寫的一樣... – 2015-04-16 10:50:12