SQL Server для преобразования даты в виде текста в формат даты, который распознается в Excel

#sql-server #excel

#sql-сервер #excel

Вопрос:

У меня есть данные на SQL Server в текстовом формате yyyy-mm-dd Я преобразовал их в формат даты Великобритании следующим образом

 convert (varchar (10), main.Tbl_ServiceOrder.SOCreatedOn, 103) as SOCreated
  

Затем я импортирую данные в Excel через таблицу SQL Server, но, хотя дата отображается правильно ( dd/mm/yyyy ), Excel по-прежнему распознает ее как текст.

Я могу преобразовать его в Excel через DateValue, но поскольку набор данных большой, я пытаюсь выполнить столько же в SQL.

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

1. Вы пытались добавить 0 к текстовой дате, а затем применить формулу ко всем ячейкам? ablebits.com/office-addins-blog/2015/03/26 /…

2. Я пытаюсь избежать использования Excel для его преобразования.

Ответ №1:

У меня была такая же проблема в прошлом. Для меня преобразование столбца даты в smalldatetime сработало.

 CAST(convert (varchar (10), main.Tbl_ServiceOrder.SOCreatedOn, 103) AS smalldatetime)
  

Попробуйте, возможно, у вас тоже получится.

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

1. Преобразование типа данных varchar в тип данных smalldatetime привело к значению, выходящему за пределы диапазона.

2. Это потому, что он ищет значение времени, а у исходной даты нет времени?

3. исправлено, мне приходилось добавлять [set dateformat dmy] в начало моего запроса. Спасибо

4. О, точно. Вы использовали другой формат даты. Решает ли это вашу проблему с импортом в Excel?

5. Мне даже не пришлось конвертировать в varchar. Приведения к smalldatetime было достаточно, чтобы Excel распознал его как дату. Спасибо.

Ответ №2:

Я просто искал решение, позволяющее ввести формат даты 23 (который равен ГГГГ-ММ-ДД) в Excel в качестве поля типа даты. Например, это будет текстовое значение «2020-01-01», даже если формат ячейки был date (ММ / ДД / ГГ). У меня нет выбора, кроме как запустить этот макрос, чтобы преобразовать его в дату.

 Cells.Replace What:="-", Replacement:="-", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
  

Или если ваш вводится с обратной косой чертой:

 Cells.Replace What:="/", Replacement:="/", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
  

Для меня это не было проблемой, потому что я уже использовал макрос для запуска запроса к данным в первую очередь.