Я использую Laravel 5.5 для рефакторинга одного веб-приложения, и здесь у меня есть необработанный запрос, в котором мне нужно преобразовать строку даты, полученную из пользовательского ввода с помощью PHP, в DATETIME
в Sql Server
, чтобы сравните это с некоторыми другими столбцами. Это небольшая часть запроса, где что-то не получается:
SET NOCOUNT ON;
DECLARE @the_date DATETIME;
DECLARE @floor VARCHAR(10);
SET @the_date = (SELECT CONVERT(DATETIME, '?', 105));
SET @floor = '?' + '%';
SELECT fo_bs.SeatCir,
fo_bs.UserDAS,
fo_bs.FromDate,
fo_bs.ToDate,
fo_bs.Status
FROM BookedSeats fo_bs
WHERE fo_bs.FromDate <= @the_date
AND fo_bs.ToDate >= @the_date
AND fo_bs.SeatCir LIKE @floor
Я не писал запрос, я просто адаптировал его для необработанного запроса Laravel для рефакторинга (это очень сложно, и я не хочу переписывать все это с помощью Query Builder) веб-приложения, и это ошибка брошенный Ларавелом:
SQLSTATE[22007]: Invalid datetime format: 241 [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]
Conversion failed when converting date and/or time from character string. (SQLExecute[241] at ext\pdo_odbc\odbc_stmt.c:260)
(SQL: SET NOCOUNT ON; DECLARE @the_date VARCHAR(20); DECLARE @floor VARCHAR(10); SET @the_date = (SELECT CONVERT(DATETIME, '03-04-2019 00:04:00', 105)); SET @floor = 'OV6.' + '%'; SELECT fo_bs.SeatCir, fo_bs.UserDAS, fo_bs.FromDate, fo_bs.ToDate, fo_bs.Status FROM FlexibleOffice.dbo.BookedSeats fo_bs WHERE fo_bs.FromDate <= @the_date AND fo_bs.ToDate >= @the_date AND fo_bs.SeatCir LIKE @floor )
Теперь, если я скопирую весь SQL-код из ошибки (3-я строка) и вставлю его в SQL Server Management Studio и выполню его, он отлично получит строки, и поэтому я так растерялся.
Существует ли какой-либо строгий режим в odb_driver для Laravel? Я пробовал настройку
'strict' => false
в config/database.php
для моей конфигурации соединения, но не повезло с этим.