我在日志中找到的错误是下面的错误。
'Illuminate \ Database \ QueryException',消息为'SQLSTATE [22007]: [Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]转换 从字符串转换日期和/或时间时失败。 (SQL:
SELECT COUNT(*) AS aggregate
FROM [mytable]
WHERE [mytable].[deleted_at] IS NULL
AND [created_at] BETWEEN '2015-09-30T00:00:00' AND '2015-09-30T23:59:59'
AND ((SELECT COUNT(*) FROM [mytable_translation]
WHERE [mytable_translation].[item_id] = [mytable].[id]) >= 1)
)” 在 wwwroot的\ MyProject的\厂商\ laravel \框架\ SRC \照亮\数据库\ Connection.php:625
在数据库中,DataType为datetime
且不为空
基于marc_s's answer我试图更改我发送到数据库的格式。所以我在T
上没有and [created_at] between '2015-09-30 00:00:00' and '2015-09-30 23:59:59'
的情况下尝试过。
在我的本地,我正在使用mysql,代码工作得很好。如果我在SQL Server客户端上测试上面的查询,两者(有和没有T
)也可以工作。
如何在不对数据库本身进行任何更改的情况下解决此问题?
PHP / Laravel代码:
$items = $items->whereBetween($key, ["'".$value_aux."T00:00:00'", "'".$value_aux."T23:59:59'"]);
答案 0 :(得分:1)
在@ lad2025的帮助下,我得到了它的工作。
基于他对我的问题的评论,我改变了代码部分(在这种情况下是Laravel / PHP)我传递的格式。 (实际上,我“删除”了它自己的格式,只是在传递给查询之前将字段添加到变量中。这样,我让数据库决定他想要的格式)
而不是
$itens = $itens->whereBetween($key, ["'".$value_aux."T00:00:00'", "'".$value_aux."T23:59:59'"]);
我将代码更改为:
$sta = $value_aux."T00:00:00";
$end = $value_aux."T23:59:59";
$itens = $itens->whereBetween($key, [$sta, $end]);