【发布时间】:2015-12-05 18:59:22
【问题描述】:
我在日志中发现的错误如下。
'Illuminate\Database\QueryException' 带有消息'SQLSTATE[22007]: [Microsoft][ODBC Driver 11 for SQL Server][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\vendor\laravel\framework\src\Illuminate\Database\Connection.php:625
在数据库中,DataType 是 datetime 并且是not null
基于marc_s's answer,我尝试更改发送到数据库的格式。所以我尝试在and [created_at] between '2015-09-30 00:00:00' and '2015-09-30 23:59:59' 上不使用T。
在我的本地,我使用的是 mysql,并且代码运行良好。如果我在 SQL Server 客户端上测试上面的查询,两者(有和没有T)也都可以工作。
如何在不对数据库本身进行任何更改的情况下解决此问题?
PHP/Laravel 代码:
$items = $items->whereBetween($key, ["'".$value_aux."T00:00:00'", "'".$value_aux."T23:59:59'"]);
【问题讨论】:
-
试试:
{ts'1900-01-01 00:00:00'}这种格式,比如between {ts '2015-09-30 00:00:00'} and ... -
对不起@lad2025 我不知道我该如何实现这种格式(如果你说的是 YYYY-DD-MM 已经被用作上面的示例)
-
2015-09-30YYYY-MM-DD 怎么样?也可以试试SET DATEFORMAT YMD -
@lad2025 (2015 == YYYY); (09 == MM); (30 == DD); 2015 年 9 月的最后一天
-
很高兴听到它有效。
标签: sql sql-server laravel-4 sql-server-2012