【问题标题】:Converting Date from '01-JAN-85' format to MySQL readable in table (from Postgres)将日期从“01-JAN-85”格式转换为表中可读的 MySQL(来自 Postgres)
【发布时间】:2015-11-04 14:41:29
【问题描述】:

我有一组代码,我从 Postgres 转换为在 MySQL (PHPmyAdmin) 上工作,该代码已经具有以下格式的插入部分:

INSERT INTO ORD (TOTAL, SHIPDATE, ORDID, ORDERDATE, CUSTID, COMMPLAN)
VALUES ('101.4', '08-JAN-87', '610', '07-JAN-87', '101', 'A');

由于 MySQL 不喜欢日期为 '08-JAN-87',它最终只会在日期列中显示 0000-00-00。

从我到目前为止所做的搜索来看,唯一给出的解决方案似乎是在 select 语句期间对其进行转换,以便正确显示。我想知道改变数据本身的方法。 (不仅仅是一个选择语句)

这是针对 uni 作业的,讲师只能建议手动将所有插入语句更改为它可以接受的格式。这可能适用于这种情况,但从长远来看或对于更大的数据转储,这是不可能的。

【问题讨论】:

  • 数据以什么格式存储?
  • 08-JAN-87 不是 Postgres 存储日期数据的方式,那么你从哪里得到它呢? Postgres 将接受该格式的日期输入,但需要正确设置 datestyle 参数以避免 YMD 和 DMY 之间的歧义。即 12-JAN-02 可能是 2002 年 1 月 12 日或 2012 年 1 月 2 日。
  • @Shadow 在创建表步骤中声明为“DATE”格式。
  • @DavidSoussan 这正是代码用于预加载的方式。 Postgres 可以很好地处理和显示它。现在我们要将代码移植到 MySQL 并根据需要进行修复。
  • 如果有帮助请查看此链接stackoverflow.com/questions/404875/…,您可以使用 sed 转换日期格式

标签: mysql postgresql phpmyadmin


【解决方案1】:

您需要修改导入,以便为 MySQL 转换数据字符串

INSERT INTO ORD (TOTAL, SHIPDATE, ORDID, ORDERDATE, CUSTID, COMMPLAN)
VALUES ('101.4', STR_TO_DATE('08-JAN-87', '%d-%b-%y'), '610', STR_TO_DATE('07-JAN-87', '%d-%b-%y'), '101', 'A');

这告诉 mysql 字符串 08-JAN-87 是格式为 DD-MMM-YY 的日期,并将其转换为有效的日期数据类型。

【讨论】:

  • 如上所述,我试图避免更改所有插入语句,因为如果出现更多记录的错误,这将是不切实际的。但如果这是唯一的方法,那么我会让它工作!与自己更改它们相比,STR_TO_DATE 更容易复制/粘贴,所以谢谢。
  • 嗯,您可以使用正则表达式为您完成此操作,无论是在脚本中还是在您的 IDE 中。一切都取决于有多少。
猜你喜欢
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 2020-05-12
相关资源
最近更新 更多