3

当我尝试将带有日期/时间的记录插入到 MSSQL 2008日期时间字段中时

$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 年 1 月 7 日的表中得到值“2013-01-07 00:00:00”。

如果日期大于 12,插入失败并出现 PDOException "SQLSTATE[22007]: [Microsoft][SQL Server Native Client 11.0][SQL Server]nvarchar 数据类型到 datetime 数据类型的转换导致 out-of -范围值”。

当我对datetime2字段执行完全相同的操作时,它被正确插入。任何人都知道如何规避这个问题?将数据类型从 datetime 更改为 datetime2 不是一种选择。谢谢你。

4

2 回答 2

2

我在其他地方发现,在 date() 函数中使用 ISO 格式可以正确插入日期,而不管基础数据库字段类型(datetime、datetime2、smalldatetime)如何。所以为了避免问题中的问题使用

date("Ymd H:i:s")

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

于 2014-02-14T10:52:54.960 回答
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

现场演示

于 2013-06-10T18:20:49.620 回答