mysql中的日期比较
问题描述:
我试图在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
我怎么能找到,如果日期已经存在?
答
您的日期比较是错误的
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')
大!有效。谢谢。 –