“如何修复错误”;从字符串“转换日期时间”时转换失败;在SQL查询中?
我在日志中发现的错误如下 带有消息“SQLSTATE[22007]”的“Illumb\Database\QueryException”: [Microsoft][ODBC驱动程序11 for SQL Server][SQL Server]转换 从字符串转换日期和/或时间时失败。(SQL: )" 在里面 wwwroot\myproject\vendor\laravel\framework\src\light\Database\Connection.php:625 在数据库上,数据类型为“如何修复错误”;从字符串“转换日期时间”时转换失败;在SQL查询中?,sql,sql-server,laravel-4,sql-server-2012,Sql,Sql Server,Laravel 4,Sql Server 2012,我在日志中发现的错误如下 带有消息“SQLSTATE[22007]”的“Illumb\Database\QueryException”: [Microsoft][ODBC驱动程序11 for SQL Server][SQL Server]转换 从字符串转换日期和/或时间时失败。(SQL: )" 在里面 wwwroot\myproject\vendor\laravel\framework\src\light\Database\Connection.php:625 在数据库上,数据类型为dateti
datetime
,并且不为null
基于,我尝试更改发送到数据库的格式。因此,我尝试在“2015-09-30 00:00:00”和“2015-09-30 23:59:59”之间在和[created_at]上不使用T
在本地,我使用的是mysql,代码运行得很好。如果我在SQL Server客户机上测试上述查询,这两种方法(使用和不使用T
)都可以工作
如何在不对数据库本身进行任何更改的情况下解决此问题
PHP/Laravel代码:
$items = $items->whereBetween($key, ["'".$value_aux."T00:00:00'", "'".$value_aux."T23:59:59'"]);
在@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]);
试试:{ts'1900-01-01 00:00:00'}
这种格式,就像{ts'2015-09-30 00:00:00'}和……
对不起@lad2025我不知道如何实现这种格式(如果你说的是YYYY-DD-MM已经被用作上面的示例)YYYY-MM-DD是如何实现的?还可以尝试设置日期格式YMD@lad2025(2015==YYYY);(09=毫米);(30==DD);2015年9月的最后一天,我很高兴听到它的工作。
$sta = $value_aux."T00:00:00";
$end = $value_aux."T23:59:59";
$itens = $itens->whereBetween($key, [$sta, $end]);