2015-09-09 39 views
2

我在日誌中發現的錯誤是下面的錯誤。如何修復SQL查詢中的錯誤「從字符串轉換datetime時轉換失敗」?

'照亮\數據庫\ QueryException' 與消息「SQLSTATE [22007]: [微軟] [ODBC SQL Server的驅動程序11] [SQL服務器]轉換 從字符串轉換日期和/或時間時失敗。 (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並且是非null

基於marc_s's answer我試圖更改for我發送到數據庫的墊子。所以我試着在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'"]); 
+0

嘗試:'{ts'1900-01-01 00:00:00' }'這種格式,如'之間{TS「二零一五年九月三十日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]); 
相關問題