2014-04-10 102 views
0

I`ve創建此表在MySQL:MySQL的搜索記錄

CREATE TABLE events (
    id TINYINT PRIMARY KEY AUTO_INCREMENT, 
    title VARCHAR (15) NOT NULL, 
    description TEXT NOT NULL, 
    _type VARCHAR (15) NOT NULL, 
    date_time DATETIME NOT NULL, 
    location VARCHAR (15) NOT NULL 
)ENGINE = INNODB; 

以後,我在表中插入一些記錄,它們中的一個DATETIME場2014年4月4日00:00 :00。我想要的是通過它的DATETIME字段搜索此記錄。例如:

SELECT * FROM events WHERE date_time = 2014-04-04; 

但這個查詢返回:

Empty set, 1 warning (0.00 sec) 

爲什麼這個isn`t工作?

回答

1

您需要使用DATE()得到的時間字符串作比較的日期部分(並把周圍的日期字符串引號):

SELECT * FROM events WHERE DATE(date_time) = '2014-04-04'; 
+0

嘿喬恩,你可以評論接受的答案[這裏](http://stackoverflow.com/questions/14104304/mysql-select-where-datetime-matches-day-and-not-necessarily-time)?我正要把這個標記爲僞裝,並建議不要使用'DATE'的回答 – Andy

+0

工作!對不起,愚蠢的問題,並感謝.. :) – user2976091

+1

@Andy這將是一個更好的做法,然後我在這裏回答。 –

1

你有一個選項是

WHERE columname BETWEEN '2014-04-04 00:00:00' AND '2014-04-04 23:59:59' 

的在WHERE DATE(date_time) = '2014-04-04'回答中使用此優點的優點是,使用DATE函數(如Eugine Reick在此answer中提到的)

  • 它會計算所有行,包括那些不符合
  • 這將使它無法使用索引的查詢

因此,如果你的表是小DATE()並且預計不會顯着增長,DATE答案將適用於您。但是,如果您期望獲得大量數據,性能將會惡化。最好使用BETWEEN選項。

+0

是的,我試過這個,它工作。還有一個小問題 - 我如何才能在一天之內搜索例如? – user2976091