SQL Server, Неправильный синтаксис, Преобразовать в datetime

#sql-server #sql-server-2008

#sql-сервер #sql-server-2008

Вопрос:

Используя ASP classic, я хочу преобразовать дату Tue, 21 Apr 2020 12:23:00 GMT в формат AAAA-MM-DD HH:MM:SS , чтобы вставить ее в базу данных SQL Server 2008.

Мой код:

 CONVERT('Tue, 21 Apr 2020 12:23:00 GMT', GETDATE(), 20)
  

Я получаю эту ошибку:

Неправильный синтаксис для ‘Вт, 21 апр 2020 12:23:00 по ГРИНВИЧУ’.

Комментарии:

1. Просто в качестве примечания: SQL Server 2008 и 2008 R2 уже не имеют расширенной поддержки red-gate.com/simple-talk/sql/database-administration/… — время для обновления!

Ответ №1:

Обратите внимание, что даты в SQL Server фактически не имеют никакого внутреннего строкового формата. Скорее, они хранятся как двоичные. Одним из вариантов здесь было бы взять следующую подстроку вашей входной метки времени, а затем использовать TRY_CONVERT для преобразования ее в подлинное datetime внутри SQL Server:

 Tue, 21 Apr 2020 12:23:00 GMT  <-- start with this input
21 Apr 2020 12:23:00           <-- convert this string to datetime
  

Пример кода:

 WITH yourTable AS (
    SELECT 'Tue, 21 Apr 2020 12:23:00 GMT' AS dt
)

SELECT
    dt,
    TRY_CONVERT(datetime, SUBSTRING(dt, 6, LEN(dt) - 9)) AS dt_out
FROM yourTable;
  

снимок экрана из демонстрационной ссылки ниже

ДЕМОНСТРАЦИЯ

Редактировать:

Если вы используете более раннюю версию SQL Server, то вы можете использовать CONVERT с маской формата 106, используя ту же подстроку, что и выше:

 SELECT
    dt,
    CONVERT(datetime, SUBSTRING(dt, 6, LEN(dt) - 9), 106) AS dt_out
FROM yourTable;
  

Комментарии:

1. Я использую sql server 2008, я не могу использовать TRY_CONVERT с совместимостью ниже 110

2. @user_1330 Затем используйте CONVERT с маской формата 106 , см. мой обновленный ответ.

3. использование вставки непосредственно с sql server работает очень хорошо, но использование asp classic не работает, у вас есть идея, пожалуйста? Ошибка: не удается преобразовать дату и / или время из строки.

4. Мне нужно было бы увидеть ваш ASP-код (и я не очень хорошо его знаю). Предполагая, что приведенный выше запрос устраняет вашу непосредственную проблему с SQL Server, вы можете захотеть открыть новый вопрос для проблемы ASP.