mysql中的日期比较

时间:2015-05-04 06:12:12

标签: java mysql jsp date

我试图在mysql表中插入一条记录,如果id和date不存在但使用以下存储过程,即使该记录已经存在,也会插入记录。

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 个答案:

答案 0 :(得分: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')