Я столкнулся с проблемой обработки необработанного ввода даты и времени («17.06.2023, 02:41:38») из кортежа в таблицу SQL Server, которая определяется как дата и время.
Мой SQL:
my_sql = insert into @my_table
(
ename
, eid
, eloc
, ejoindate
)
values (%s,%s,%s,%s)
cursor.execute(my_sql, ('ram', 'ABC001', 'India', '06/17/2023, 02:41:38')
При успешном запуске столбец ejoindate должен иметь такое значение '2023-06-17 02:41:38.000'
получение ошибки
(242, b'Преобразование типа данных nvarchar в тип данных datetime привело к получению значения вне допустимого диапазона. Сообщение об ошибке DB-Lib 20018, серьезность 16:\nОбщая ошибка SQL Server: проверьте сообщения от SQL Server\ п')
Любые предложения по работе с преобразованием даты и времени или что-то в этом роде?
Я не могу изменить ввод, поскольку он поступает из другого приложения в корзину GCS. Это то, чем можно управлять в sql-запросе.
У вас есть код Python, я уверен, что вы можете конвертировать и форматировать даты там
Если бы только pymsswl поддерживал "параметры", отличные от строк...
Привет @ThomA, не могли бы вы привести пример? Спасибо
Чего, @rajS..?
как быть с параметрами?
Вы используете параметры. Проблема в вашем значении, 06/17/2023, 02:41:38 недопустимая строка, которую можно неявно преобразовать. Вам нужно сделать его неоднозначным форматом, таким как формат, предложенный ранее @Zhorov. 20230617 02:41:38 тоже сработает.





Мне все еще нужен еще один момент, иначе я бы использовал комментарий.
Уберите запятую между данными и временем, и это должно работать, если компьютер настроен на формат даты США.
cursor.execute(my_sql, ('ram', 'ABC001', 'India', '06/17/2023, 02:41:38')
Может быть, что-то вроде этого?
values (%s,%s,%s, REPLACE(%s, ',', ''))
Это вполне может потерпеть неудачу; для большей части мира в году не 17 месяцев (всего 12).
Попробуйте передать значения даты и времени в однозначном формате:
'2023-06-17T02:41:38'.