【问题标题】:How to fix error "Conversion failed when converting datetime from character string" in SQL Query?如何修复 SQL Query 中的错误“从字符串转换日期时间时转换失败”?
【发布时间】: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-30 YYYY-MM-DD 怎么样?也可以试试SET DATEFORMAT YMD
  • @lad2025 (2015 == YYYY); (09 == MM); (30 == DD); 2015 年 9 月的最后一天
  • 很高兴听到它有效。

标签: sql sql-server laravel-4 sql-server-2012


【解决方案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]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 2013-03-13
    相关资源
    最近更新 更多