2012-01-11 81 views
0

我的查詢兩個日期之間的記錄類似於試圖找到

WHERE `Project`.`user_id` = 9 
    AND `Project`.`project_status` = 1 
    AND `Project`.`project_type_id` = 4 
    AND `Project`.`approval_date` >= '01/08/2012' 
    AND `Project`.`approval_date` <= '01/12/2012' 

我有一個符合此條件的記錄,我居然基礎上創建的一個記錄的查詢,但它不返回。我真的不想使用BETWEEN,因爲應用程序可以使用開始日期或結束日期

+2

您使用什麼數據類型爲'approval_date'字段 – calumbrodie 2012-01-11 00:31:45

+0

嘗試逐個應用每個搜索條件,直到沒有行被返回,這將有助於查找問題。沒有一些樣本數據很難回答你的問題。 – Tony 2012-01-11 00:31:47

+0

@kissmyface - 基於OP的以前的問題 - http://stackoverflow.com/questions/8764015/finding-records-that-have-dates-that-fall-before-the-date-7-days-from-now - 這是一個日期時間列 – 2012-01-11 00:37:21

回答

2

您應該使用STR_TO_DATE()將'01/08/2012'和'01/12/2012'轉換爲MySQL日期/時間值

eg

STR_TO_DATE('01/08/2012', '%d/%m/%Y') 
+0

來處理日期爲'dd/mm/yyyy',可能會有問題。唯一的問題是我需要格式化datetime我試圖tweeking你說,但它沒有奏效。 Project.project_type_id = 4 AND Project.approval_date> = STR_TO_DATE('01/02/2012','%Y-%m-%d%H:%i:%s')AND Project。approval_date <= STR_TO_DATE('01/26/2012','%Y-%m-%d%H:%i:%s')' – numerical25 2012-01-11 17:45:22

+0

您必須定義格式掩碼以匹配日期字符串的實際格式 – 2012-01-11 22:20:29

1

嗯,這是真的只有查詢的一部分 - 任何 「之間」 的作品不同於你的暗示 - 在這裏是一個從MySQL手冊的摘錄:

•位於expr BETWEEN MIN和MAX如果expr大於或等於min並且 expr小於或等於max,則BETWEEN返回1,否則它 返回0.如果所有參數都等於表達式(最小< = expr和expr < = max)屬於同一類型。否則鍵入 將根據章節 11.2「表達式評估中的類型轉換」中描述的規則進行轉換,但將其應用於所有三個參數。

除了「approval_date」列的數據類型是什麼之外呢?

+0

我想我的問題可能是我比較日期格式的字符串與日期時間格式的列。我需要首先將我的字符串轉換爲datetime。請參閱我在下面對kissmyface回覆所做的評論 – numerical25 2012-01-11 17:37:41

1

這看起來好像應該乍一看,但是您提供的值不是有效的日期時間。試試這個

WHERE `Project`.`user_id` = 9 
AND `Project`.`project_status` = 1 
AND `Project`.`project_type_id` = 4 
AND `Project`.`approval_date` >= '2012-01-08 00:00:00' 
AND `Project`.`approval_date` <= '2012-01-12 00:00:00' 
+0

好的,那就是我想要的。是否可以使用'STR_TO_DATE()'函數轉換爲日期時間格式?因爲我想考慮時間。 – numerical25 2012-01-11 17:00:50

+0

我試過使用php date()來格式化日期。 'date(「Y-m-d H:i:s」,$ start);'我正在使用JQUERY獲取日期。值$ start = 01/02/2012。由於某種原因,我得到以下錯誤'遇到一個非格式化的數值'和PHP正在返回格式化日期''1969-12-31 19:00:00' – numerical25 2012-01-11 17:33:16

+0

你是否使用jquery UI datepicker? – calumbrodie 2012-01-11 21:13:47

0

你仍然可以使用BETWEEN

WHERE `Project`.`user_id` = 9 
AND `Project`.`project_status` = 1 
AND `Project`.`project_type_id` = 4 
AND (`Project`.`approval_date` BETWEEN '2012-01-08 00:00:00' AND '2012-01-12 23:59:59') 
+0

如果有時結束日期或開始日期不可用,我仍然可以使用它們之間的關係。 – numerical25 2012-01-11 17:35:06

0

我的主要問題是獲取字符串格式化成日期時間。 kissmyface正確地構建它正確,所以mysql可以理解。所以我用php在發送之前將其轉換。

"Project.approval_date >= '".date("Y-m-d H:i:s", strtotime($start))."'"; 
"Project.approval_date <= '".date("Y-m-d H:i:s",strtotime($end))."'"; 

這幾乎是我的解決方案。除非有人知道在MySQL端做同樣的事情。