2012-10-30 154 views
3

我想從MySQL服務器的條目,其中日期> date_begin and < date_end比較字符串,日期與MySQL查詢另一個字符串最新

我的問題是,在表列「date」設置爲VARCHAR,而我比較它的字符串也直接從<input type="text"/>

的日期格式(如串/ VARCHAR)在MySQL表,並在文本框中會DD.MM.YYYY

我的問題是,如果我這樣做

(PHP代碼)

$query = "SELECT * FROM table WHERE date>='" . $dateBegin . "' AND date<='" . $dateEnd . "'"; 

結果將是完全隨機的。

我知道爲什麼發生這樣的問題是:我怎麼能比較這得到正確的結果?

謝謝大家誰可以幫助

UPDATE:

現在我已經tryed這個解決方案,但它也不起作用。

$query = "SELECT * FROM artikel WHERE STR_TO_DATE(datum, '%d.%m.%Y')>=STR_TO_DATE('" . $_REQUEST['dateTo'] . "', '%d.%m.%Y')" . "' AND STR_TO_DATE(datum, '%d.%m.%Y')<=STR_TO_DATE('" . $_REQUEST['dateTo'] . "', '%d.%m.%Y')"; 

$_REQUEST['dateFrom']$_REQUEST['dateTo']從2個文本框來,將輸入是這樣"05.06.2005"的字符串。在'datum'(日期的德語)列中的db-table'artikel'(德語中的文章)中,值爲具有相同格式(「05.06.2005」)的VARCHAR's。

+2

爲什麼日期爲varchar?爲什麼不是時間戳或日期時間? –

+0

將日期保留爲字符串,然後將其作爲日期進行處理意味着您會創建額外的編碼開銷,服務器上的額外負載,在服務器上使用額外的磁盤空間,引入具有錯誤格式的'日期'的可能性,以及破壞SQL引擎使用索引搜索該字段的能力。 * [我不能過分強調這一點] *:將數據存儲在正確的數據類型中,不要存儲字符串並將其「即時」轉換;你正在走向一個受到傷害,低效率和調試地獄的世界。 – MatBailie

+0

它不是我的mysql服務器,如果我有能力將數據類型更改爲「日期」,我將提供支持。我只是必須爲現有的網絡應用程序添加過濾功能的人。但無論如何感謝 – Ace

回答

9

始終比較日期與日期,整數與整數等

用MySQL,你可以使用str_to_date功能來指定字符串日期是如何被處理。

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

例如如果你的日期列被稱爲「指明MyDate」: -

SELECT * from table 
where STR_TO_DATE(mydate, '%m/%d/%Y') >= STR_TO_DATE('04/31/2004', '%m/%d/%Y') 
... 

並始終確保你從用戶驗證任何字符串輸入,以避免SQL注入攻擊。

編輯:正如德姆指出的那樣,這是次優的,因爲日期值應該作爲日期值存儲在數據庫中。

+0

我會試試這個。這是STR_TO_DATE(日期,'%m /%d /%Y')一個有效的MYSQL函數嗎? – Ace

+0

@Ace:是的。看到我粘貼到答案的鏈接。 – davek

+0

@Ace:你會把你的「$ dateBegin」代替「2004年4月31日」等 – davek

1

可以使用

之間
"SELECT * FROM table WHERE date between'" . $dateBegin . " AND " . $dateEnd . "'"; 
+0

問題是MYSQL無法將日期作爲字符串進行比較。 – Ace