1

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

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

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

4

5 回答 5

1

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

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

当然,根据您的需要编辑格式。

于 2013-04-27T17:21:50.480 回答
1

只需使用此代码

 $date="01/1/2013";

date('Y-m-d',strtotime($date))
于 2013-04-27T18:03:45.710 回答
0

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

将其存储为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
于 2013-04-27T17:04:12.707 回答
0

这可能不是一个完整的答案,但如果您知道确切的顺序 (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 作为索引。

于 2013-04-27T17:07:36.643 回答
-1

这是一种简单的方法:

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);
于 2013-04-27T17:20:20.537 回答