【问题标题】:Simply convert 5 digit number in mysql database to a date只需将mysql数据库中的5位数字转换为日期
【发布时间】:2013-03-13 11:02:41
【问题描述】:

我一直在网上寻找这个答案,但不理解所写的所有内容。我尝试从 unix_timestamp() 执行,但它返回错误的日期。 我所做的是将一个 xls 文件导入数据库。它将日期转换为 5 位数字。 有简单的方法吗?任何帮助都会很棒。 这是我尝试过的。我尝试将 excel 文件中的日期格式更改为 YYYY-MM-DD,但没有成功。

【问题讨论】:

  • “这不起作用”是什么意思?
  • 我将其更改为该格式,然后再次导入文件,它仍然作为 5 位数字进入数据库
  • MySQL字段的数据类型是什么?
  • 现在它只给我全零
  • 尝试将其设为 varchar 并查看导入的内容。之后,您可以弄清楚日期格式是什么并进行转换。五位数字可能是存储日期(自 1900 年以来的天数)的标准 Excel 方式。

标签: mysql excel date format


【解决方案1】:

要使用 Excel 值,请尝试以下操作:

select date('1899-12-30') + interval <number> days

例如:

select date('1899-12-30') + interval 40000 days

返回 2009 年 7 月 6 日,就像在 Excel 中一样。

换句话说,您可以将值作为整数带入,然后在 SQL 中进行转换。

我实际上有点惊讶,因为 Excel 上的 0 日期本质上是 1900 年 1 月 0 日,即 1899 年 12 月 31 日。我怀疑 1900 年缺少闰年存在问题。Excel 的值为“60”表示为 1900 年 2 月 29 日。这很有趣,我没有意识到 Excel 有这个错误。

因此,上述代码适用于所有大于 61 的值。

【讨论】:

  • 时间之沙:显然,在史前时期,Microsoft 桌面表单和电子表格使用(d!)“01Jan1900”开始日期日历时钟,而 IEEE 人发誓(发誓!)“01Jan1960”因此,您的 delta 60 年天数!
【解决方案2】:

试试这个

        $date_format = floor($excelDateTime);
        $time_format = $excelDateTime - $date_format;
        $mysql_strdate = ($date_format > 0) ? ( $date_format - 25569 ) * 86400 + $time_format * 86400 :    $time_format * 86400;
        $mysql_date_format = date("Y-d-m", $mysql_strdate);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-13
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多