Ошибка преобразования при преобразовании даты и / или времени из символьной строки при вставке даты и времени в SQL - PullRequest
0 голосов
/ 29 мая 2019

Я вставил несколько столбцов из файла Excel в таблицу SQL.

Я пытаюсь выбрать столбец даты, но получаю «Преобразование не удалось при преобразовании даты и / или времени из строки символов при вставке даты и времени»

Мой запрос

Select 
CONVERT(datetime2, SS.OrderDate) Date_Created
--CAST(SS.OrderDate as datetime2) Date_Created
FROM Table SS (nolock)

Обе эти строки не работают.

Мой столбец даты выглядит следующим образом:

43613
43612
43611

В какой Excel можно форматировать обратно (кто-нибудь знает, как? Какой это формат?)

5/28/2019
5/27/2019
5/26/2019

Как мне сделать то же самое в SQL?

Ответы [ 3 ]

3 голосов
/ 29 мая 2019

Короткий ответ - это работает для большинства дат.

select dateadd(day, 43613, '1899-12-30')
0 голосов
/ 29 мая 2019

Еще один вариант - использовать неявное преобразование float в datetime .Обратите внимание на минус 2,0

Пример

Select AsInt       = convert(datetime,43613-2.0)
      ,WithDecimal = convert(datetime,43613.5-2.0)

Возвращает

AsInt                    WithDecimal
2019-05-28 00:00:00.000  2019-05-28 12:00:00.000

Теперь, ЕСЛИ ваша колонка является varcharвозможно, что-то вроде этого

Пример

Declare @YourTable Table ([OrderDate] varchar(50))
Insert Into @YourTable Values 
('43613'),
('43612'),
('43611')

select AsDateTime = convert(datetime,0+[OrderDate]-2.0)
 From @YourTable

Возвращает

AsDateTime
2019-05-28 00:00:00.000
2019-05-27 00:00:00.000
2019-05-26 00:00:00.000
0 голосов
/ 29 мая 2019

Серийные даты Excel - это количество дней с 1900-01-01 (где 1 равно 1900-01-01, поэтому сначала вычтите 1)

Вы можете преобразовать его следующим образом:

SELECT
    CONVERT( date, DATEADD( day, SS.OrderDate - 1, '1900-01-01' ) ) AS OrderDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...