【问题标题】:store m/d/y (01/1/2001 example) string as DATE将 m/d/y(01/1/2001 示例)字符串存储为 DATE
【发布时间】:2013-04-21 16:54:10
【问题描述】:

当我尝试SELECT CAST('01/1/2001' AS DATE) 时,它总是返回NULL(作为我无法使其工作的示例)。我正在尝试 INSERT 以这种格式创建的数据。

如何将这种格式的日期存储在DATE 列中?

请注意,日期永远不会有前缀 0,而月份如果小于 10,则会有前缀。

【问题讨论】:

  • 如果您使用 PHP...在查询数据库之前,您能否使用 substrpreg_match 将日期格式重新转换为明确的 MySQL 日期格式?
  • @SébastienRenauld 我很乐意,我只是不知道怎么做。 PHP 抓取数据并将其存储在 MySQL 中。
  • 请不要以这样的格式存储日期。你可能认为10/12/2013 是 10 月 12 日,但对我来说是 12 月 10 日。它会引起人与人之间的混淆,更重要的是计算机无法猜测您的意思。在存储日期时始终使用yyyy-mm-dd 以确保它是明确的。随意以您喜欢的任何本地化格式(或者最好是用户喜欢的格式)将它们呈现给用户,但在您的程序中,您应该始终坚持使用 yyyy-mm-dd 或 datetime 对象。
  • @Spudley 我无法控制数据源。
  • @JoeCoderGuy - 数据源不受您的控制,但一旦进入程序就将其转换为明确的格式。正如我所说:接受用户首选格式的输入,但在内部使用合理的格式。

标签: php mysql string date date-format


【解决方案1】:

您不想以这种格式存储它。这种方式不是很有用,当你需要做更多的时候,你会后悔的,然后就阅读它。

将其存储为date 数据类型...

$date = DateTime::createFromFormat("d-j-Y","01/1/2001"); 
$new_format = $date->format("Y-m-d"); // 2001-01-01

...然后在选择时格式化:

 SELECT DATE_FORMAT(`date`, "%m/%l/%Y") AS date // 01/1/2001

【讨论】:

    【解决方案2】:

    这可能不是一个完整的答案,但如果你知道确切的顺序(d/m/Y),你可以这样做:

    list($month,$day,$year) = explode("/","01/1/2013");
    $date = $year."-".str_pad($month,2,"0", STR_PAD_LEFT)."-".str_pad($day,2,"0",STR_PAD_LEFT);
    

    然后,您可以安全地使用 MySQL 日期格式进行比较和一般检查,而不是使用 VARCHAR 进行伪比较。不仅如此,您还将受益于 DATETIME 作为索引。

    【讨论】:

    • 对于VALUE,我是用"'.$date.'" 还是".$date."
    • 视情况而定。你参数化了吗?如果没有,你应该这样做。
    【解决方案3】:

    这是一个简单的方法:

    list($month, $day, $year) = explode("/","01/1/2013");
    $time = mktime(0,0,0,intval($month),intval($day),intval($year));
    $date_format = date("Y-m-d", $time);
    

    【讨论】:

      【解决方案4】:

      你可以像这样使用MySQL函数STR_TO_DATE()

      STR_TO_DATE('01/1/2012',  '%d/%m/%Y')
      

      当然可以根据需要编辑格式。

      【讨论】:

        【解决方案5】:

        只需使用此代码

         $date="01/1/2013";
        
        date('Y-m-d',strtotime($date))
        

        【讨论】:

          猜你喜欢
          • 2021-03-09
          • 2021-04-29
          • 2017-06-02
          • 2020-05-09
          • 2013-09-09
          • 2016-12-20
          • 1970-01-01
          • 2021-05-16
          相关资源
          最近更新 更多