我收到此错误消息:
将nvarchar数据类型转换为日期时间
当我尝试将MySQL datetime
变量绑定到SQL Server语句中的smalldatetime
变量时。代码如下:
$s = $dbcnx->prepare("SELECT MAX(attr_81577_) AS max_date FROM object_70969_");
$s->execute();
$r = $s->fetch(PDO::FETCH_ASSOC);
$max_date = $r[max_date]; // we got the maximum date from MySQL table
$s = $dbms->prepare("SELECT * FROM orgs WHERE update_date >= :max_date"); // Now we want to filter SQL Server table based on $max_date value
$s->bindParam(':max_date', $max_date);
$s->execute();
这有什么问题,我该怎么办?
答案 0 :(得分:2)
我认为您的SQL Server可能会被您正在使用的非标准日期格式混淆。 “2015-09-18 16:22:00”当然是一种非常合理的格式,但它是not on the list of standard date literal formats for SQL Server。
因此,我尝试使用完全明确的ISO 8601格式,将日期格式设置为“2015-09-18T16:22:00”。 PHP具有ISO 8601“c”的特定格式,但具有讽刺意味的是,not compatible with SQL Server's ISO 8601 format。所以,试试:
date('Y-m-d\TH:i:s', strtotime($max_date));
请注意,我不能完全确定您正在使用的日期格式works OK with SQL Server in general,所以这可能与您的特定服务器配置(日期格式或语言设置?)或PDO有关;我不太了解PDO SQL Server驱动程序。
当然,SQL Server传统上与Microsoft客户端代码一起使用,它将实际日期对象绑定到日期参数而不是字符串,因此您永远不必担心格式化。不知道PDO是否有办法做到这一点。
答案 1 :(得分:0)
MySQL期望日期格式YYYY-MM-DD,我不确定你得到的Oracle格式是什么。您可能希望使用PHP的stringtotime
函数来使PHP转换Oracle日期。
如:
$maxDate = date('Y-m-d', strtotime($max_date));
strtotime
方法是一个很棒的小函数,它以几乎任何格式获取日期信息,并尝试将其转换为可用的时间戳。