2015-05-04 178 views
0

我試圖在mysql表中插入一條記錄,如果id和日期不存在,但使用以下存儲過程即使記錄已存在,記錄也會插入。mysql中的日期比較

CREATE PROCEDURE `Add`(Id int,Date_In varchar(50), Date_In2 varchar(50), Out result int) 
BEGIN 
IF (select count(*) from mytable Where date_format(Datein, '%d/%m/%Y')=str_to_date(Date_In2, '%d/%m/%Y') and id=Id) < 1 then 
BEGIN 
... insert statement here   
set result=1; 
END; 
END if; 
end 

來自JSP頁面的日期是dd/MM/yyyy格式。

的Java:

String date2 = request.getParameter("date"); 
//15/05/2015 
insert statement goes here 

我怎麼能找到,如果日期已經存在?

回答

1

您的日期比較是錯誤的

date_format(Datein, '%d/%m/%Y') <= str_to_date(Date_In2, '%d/%m/%Y') 

的語句將返回0,使用str_to_date函數將返回日期Y-m-d格式,除非其再次格式化使用date_format功能不同的格式。

mysql> select date_format(curdate(), '%d/%m/%Y')=str_to_date('04/05/2015', '%d/%m/%Y') ; 
+--------------------------------------------------------------------------+ 
| date_format(curdate(), '%d/%m/%Y')=str_to_date('04/05/2015', '%d/%m/%Y') | 
+--------------------------------------------------------------------------+ 
|                  0 | 
+--------------------------------------------------------------------------+ 
1 row in set, 1 warning (0.00 sec) 

因此它失敗。

如果Datein存儲爲date數據類型不需要做其他的格式,你需要格式化爲Y-m-d

mysql> select date_format(curdate(), '%Y-%m-%d')=str_to_date('04/05/2015', '%d/%m/%Y') ; 
+--------------------------------------------------------------------------+ 
| date_format(curdate(), '%Y-%m-%d')=str_to_date('04/05/2015', '%d/%m/%Y') | 
+--------------------------------------------------------------------------+ 
|                  1 | 
+--------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 



date_format(Datein, '%Y-%m-%d')=str_to_date(Date_In2, '%d/%m/%Y') 
+0

大!有效。謝謝。 –