【问题标题】:How do you correctly use multiple instances of str_to_date with MySQL insert statement?您如何正确使用 MySQL 插入语句的 str_to_date 的多个实例?
【发布时间】:2016-03-20 11:51:05
【问题描述】:

我正在尝试将 2 个英国格式 (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 实例的正确方法是什么?

谢谢

【问题讨论】:

  • 你能提供你的php代码吗?
  • 您的VALUES 列表中缺少逗号 (,)。
  • '$last_name' 后面缺少逗号,也缺少 user_id 的值
  • 对不起,这是一个乱七八糟的例子,不是我的原创作品。我现在已经更新了。问题依然存在。
  • 您忘记引用 PHP 日期,所以它们不是日期 - 它们是数学除法表达式。另外, str_to_date 用于告诉 mysql 原始日期值的格式是什么。你说的是month/day/year,但提供的是day/month/year。没有月份 24 或 16...

标签: php mysql str-to-date


【解决方案1】:

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

由于您说输入格式是 monday/day,但提供了 day/month 值和 NO 时间值,因此您会得到不可靠的结果。

试试

                         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)

【讨论】:

  • 非常感谢马克!我错误地解释了 str_to_date() 功能。
猜你喜欢
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
相关资源
最近更新 更多