【问题标题】:select * INTO outfile generates date in wrong formatselect * INTO outfile 生成格式错误的日期
【发布时间】:2015-12-14 14:17:47
【问题描述】:

我正在使用以下 sql 将数据导出到 csv 文件:

select * INTO outfile 'customer.csv'
    FIELDs terminated by ',' enclosed by '"'
    LINES terminated by '\n'
    from CUSTOMER customer
    where customer.date_created < '2015-10-22 10:00:00';

我在 csv 中得到这个结果:

问题是没有从这个生成的 csv 导入数据,因为日期格式与 DB 中的不同。

数据库日期格式为 yyyy-mm-dd hh:mm:ss。空值也被替换为 \n ,这在导入时也会失败。

如何生成正确的 csv 列,即 yyyy-mm-dd hh:mm:ss 日期格式和空/空值?

错误: 日期时间值不正确:第 1 行的列“DATE_CREATED”的“23/07/2015 11:55” 不正确的整数值:第 1 行的列“column_name”的“\N”

注意: 我正在使用 mysql 工作台导入文件。 我不想直接在 csv 文件中更改格式/数据。

谢谢

更新: 感谢 AdrianBR,我意识到我首先用 excel 打开文件,它覆盖了日期格式,因此即使使用 notepad++ 也会显示错误的日期格式。 \n 仍然是一个问题。 第一次使用 notepad++ 打开时,它看起来像这样: "100","0","2015-12-02 10:16:36","2015-12-02 10:16:36","0",\N,

【问题讨论】:

  • 这是 MySQL 还是 MS SQL Server?您已将其标记为两者。您已经向我们展示了电子表格程序认为 CSAV 文件中的内容 - 而不是 实际上 文件中的内容。在文本编辑器中打开它并查看。
  • " 日期格式与 DB 不同" 数据库通常将日期存储为二进制值,无需格式化。显示它们时如何格式化它们取决于您。
  • 这是 excel,又名 FTFY
  • @MattGibson 他没有提到它是如何存储的,而是它是如何显示的,如果与那个 iso 字符串相比那就是 ISO。
  • @symcbean afaik ms sql 没有进入输出文件,但这可能无关紧要,因为我猜他的 CSV 很好,就像你说的那样

标签: mysql sql date csv


【解决方案1】:

问题很可能不是来自 mysql。

这很可能来自 Excel 显示和稍后保存日期的方式。 解决问题:

在文本编辑器(如记事本或记事本++)中打开文件并检查日期的样子,无论它是否在 ISO 中。应该会好的。

现在,如果你用 excel 打开它,它将以本地格式显示。

如果现在保存文件,很可能会用 excel 的本地日期格式覆盖 ISO 日期格式,使其不再是有效的可导入 mysql 日期。

道德:处理数据时不要使用excel,只用它来显示图表。 Excel 会对您的数据做出假设,并以最意想不到的方式对其进行处理。还记得1.19增值税税率吗? Excel 似乎认为它与 1 月 19 日相同。那个整数 ID? Excel 认为最好用科学记数法编写并将其四舍五入到前 4 位。那个 Iso 日期? Excel 认为您最好猜测哪个是月份,哪个是日期。那个小数点?当然,您希望逗号作为十进制,而将点作为千位分隔符。 FTFY!

【讨论】:

  • +1 Excel 覆盖了日期格式,因此在记事本++ 中打开它也显示错误格式。日期格式现在似乎可以使用,但“\n”仍然会导致问题?
  • \N 是 null 的占位符。如果您通过 excel 插件导入数据,(mysql for excel)它将正确显示。否则,您可以在写入 outfile 时通过将列包装在 ifnull(intcolumn, 0) 或 ifnull(stringcol, '') 中来修复它
  • 您也可以在打开文件后在 excel 中修复它,方法是进行无内容替换。请记住,在 mysql 中使用 \N 加载文件时,它会将其正确地视为空值 - 所以你实际上不必弄乱它
【解决方案2】:

也许明确指定列,并在选择列表中包含格式,如下所示:

TO_CHAR(mydate, 'yyyy-mm-dd hh24:mi:ss')

编辑:

如:

SELECT my_id, my_val1, TO_CHAR( mydate, 'yyyy-mm-dd hh24:mi:ss' )
FROM mytable

【讨论】:

  • 谢谢,能详细点吗?你如何明确指定列?我是这个领域的新手。
猜你喜欢
  • 1970-01-01
  • 2015-10-23
  • 2014-10-04
  • 2011-02-21
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 2018-07-02
相关资源
最近更新 更多