php - MySQL 到 SQL Server : The conversion of a nvarchar data type to a datetime

标签 php mysql sql-server datetime

我收到此错误消息:

The conversion of a nvarchar data type to a datetime

当我尝试将 MySQL datetime 变量绑定(bind)到 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();

这有什么问题,我该怎么办?

最佳答案

认为您的 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 客户端代码一起使用,它将实际的日期对象绑定(bind)到日期参数而不是字符串,因此您永远不必担心格式问题。不确定是否有办法使用 PDO 做到这一点。

关于php - MySQL 到 SQL Server : The conversion of a nvarchar data type to a datetime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32659238/

相关文章:

sql-server - 为什么 SUM(real) 在 SQL Server 中返回 float 数据类型?

php - 如何使用 laravel 制作 url 来查看用户个人资料,例如在 facebook 中

PHP每日奖金

mysql - 如何最好地查询 "all Y for each X that has a matching Y"的多对多关系

php - 捕获javascript秒表停止时间并将其存储为php变量

php - 使用 BASH 存储和循环 MySQL 获取的结果?

sql-server - SQL 查询迭代计划作业并将其删除。存储过程将 Job_Name 作为输入参数

sql-server - 如何在SQL中的组内按顺序查找缺失值?

php - 使用 Google reCaptcha 总是显示 'incorrect-captcha-sol'

php - paypal 快速结帐 - 付款页面中的问号