如何在MySQL插入语句中正确使用str_to_date的多个实例?

时间:2015-12-14 21:01:22

标签: php mysql str-to-date

我试图以英国格式(dd / mm / yyyy)将两个日期插入到MySQL美国日期格式的MySQL数据库中。

我正在使用str_to_date。 str_to_date的第一个实例按预期工作,但第二个实例始终插入与str_to_date的第一个实例相同的日期,即使原始日期不同。

$date_1 = "10/01/2016";
$date_2 = "16/02/2016";

$sql = "INSERT INTO customers (date_1, date_2)
VALUES (STR_TO_DATE( '$date_1', '%m/%d/%Y %h:%i' ), STR_TO_DATE( '$date_2', '%m/%d/%Y %h:%i' ))";

在MySQL插入语句中处理str_to_date的多个实例的正确方法是什么?

谢谢

1 个答案:

答案 0 :(得分:1)

格式字符串str_to_date()告诉MySQL第一个参数的日期值是什么格式。它不是如何格式化进入mysql(例如目标)格式的值。 str_to_date的输出始终是本机mysql日期/时间值,即yyyy-mm-dd hh:mm:ss

由于您说输入格式为monday/day,但提供day/month值和时间值,因此您会得到难以理解的结果。

尝试

                         24/01/2016
STR_TO_DATE( '$date_1', '%d/%m/%Y' )

代替。请注意删除时间格式字符。您的输入字符串根本没有时间值。

mysql> select str_to_date('24/01/2016', '%m/%d/%Y %h:%i');
+---------------------------------------------+
| str_to_date('24/01/2016', '%m/%d/%Y %h:%i') |
+---------------------------------------------+
| NULL                                        |
+---------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> select str_to_date('24/01/2016', '%d/%m/%Y');
+---------------------------------------+
| str_to_date('24/01/2016', '%d/%m/%Y') |
+---------------------------------------+
| 2016-01-24                            |
+---------------------------------------+
1 row in set (0.00 sec)