当我尝试将包含日期/时间的记录插入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不是一个选项。谢谢。
答案 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