2015-09-09 2 views
2

Ошибка, которую я нашел в журнале, приведена ниже.Как исправить ошибку «Ошибка преобразования при преобразовании даты и времени из символьной строки» в SQL Query?

'Осветите \ Database \ QueryException' с сообщением «SQLSTATE [22007]: [Microsoft] [Драйвер ODBC 11 для 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 \ поставщика \ Laravel \ Framework \ Src \ Illuminate \ Database \ connection.php: 625

На базе данных, тип данных является 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).


Как исправить эту проблему без каких-либо изменений в самой базе данных?

РНР/Laravel код:

$items = $items->whereBetween($key, ["'".$value_aux."T00:00:00'", "'".$value_aux."T23:59:59'"]); 
+0

Try: '{ts'1900-01-01 00:00:00}' этот формат, как 'между {ц«2015-09-30 00 : 00: 00 '} и ... ' – lad2025

+0

Первый YYYY-MM-dd – lad2025

+0

Извините @ lad2025 Я не знаю, как я мог реализовать этот формат (если вы говорите о e YYYY-DD-MM уже используется в качестве примера сверху) –

ответ

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]); 
Смежные вопросы

 Смежные вопросы