PDO插入到MSSQL日期时间交换日和月

时间:2013-06-10 18:09:33

标签: sql-server pdo

当我尝试将包含日期/时间的记录插入MSSQL 2008 datetime 字段时

$pQuery = "INSERT INTO myTable (myDate) VALUES (:my_date)";
$ps = $pdo->prepare($pQuery);
$ps->bindValue("my_date", date("Y-m-d H:i:s",strtotime('01.07.2013')), PDO::PARAM_STR);
$ps->execute();

带有代表2013年7月1日的字符串'01 .07.2013'(DD.MM.YYYY),我在表格中以“2013-01-07 00:00:00”结束,代表2013年1月7日。

如果日期大于12,则插入失败并显示PDOException“SQLSTATE [22007]:[Microsoft] [SQL Server Native Client 11.0] [SQL Server]将nvarchar数据类型转换为日期时间数据类型导致超出范围的价值“。

当我对 datetime2 字段完全相同时,会正确插入。任何人都知道如何规避这个?将数据类型从datetime更改为datetime2不是一个选项。谢谢。

2 个答案:

答案 0 :(得分:1)

我在其他地方发现,在date()函数中使用ISO格式会正确插入日期,而不管底层数据库字段类型(datetime,datetime2,smalldatetime)。所以要避免问题中的问题使用

date("Ymd H:i:s")

将日期插入MS SQL数据库时。

答案 1 :(得分:0)

你去了

$date = "01.07.2013";
$array = explode(".", $date);
$array = array_reverse($array);
$str = implode($array,"/");
echo date("Y-m-d H:i:s", strtotime($str));

这将输出

2013-07-01 00:00:00

Live Demo