#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
Для меня это не было проблемой, потому что я уже использовал макрос для запуска запроса к данным в первую очередь.