#sql #sql-server #database #type-conversion #sqldatatypes
Вопрос:
Я извлекаю данные из одной таблицы [SourceTable], где тип данных поля, на которое я ссылаюсь (источник), является VARCHAR. [Целевая таблица], в которую я пытаюсь вставить данные, имеет тип данных DATETIME.
При запуске скрипта я получаю следующее сообщение об ошибке:
Ниже приведен сценарий, который я запускаю:
SELECT
CONVERT(DATETIME, SWITCHOFFSET([BeginDateTime], DATEPART(TZOFFSET, [BeginDateTime] AT TIME ZONE 'US Eastern Standard Time'))) AS [BeginTime]
FROM [SourceTable]
Примечание: У меня есть два экземпляра, где первый-мой «сырой» экземпляр. Отсюда я выполняю моделирование и преобразования, необходимые для структурирования данных.
Комментарии:
1. Послание кажется вполне ясным. Если бы вы предоставили примеры данных, желаемые результаты и объяснение того, что вы хотите реализовать, кто-нибудь мог бы ответить на этот вопрос.
2. …и каков тип данных вашей
[BeginDateTime]
колонки?3. Реальный вопрос заключается в том, почему у вас есть столбец, который называется
BeginDateTime
, когда он не является типом данных даты и времени ? Если это avarchar
, то это, по определению, не дата-время.4. Привет. Извините, я все еще развиваю свои навыки SQL. У меня есть два примера, где первый-мой «сырой» экземпляр. Отсюда я занимаюсь моделированием и преобразованиями.
5. @CaiusJard [начало времени] — это варчар
Ответ №1:
Я успокаиваю себя, потому что изначально поторопился с решением. После просмотра сценария мне удалось решить свою проблему, выполнив следующие действия:
CONVERT(DATETIME, SWITCHOFFSET(CONVERT(DATETIME, [BeginDateTime], 120) , DATEPART(TZOFFSET, CONVERT(DATETIME, [BeginDateTime], 120) AT TIME ZONE 'US Eastern Standard Time'))) AS [BeginDateTime]
Комментарии:
1. На самом деле это не решение. Правильное решение-использовать правильный тип данных.
2. «Устранение сообщения об ошибке «и» решение фундаментальной проблемы с моделированием данных » — это две совершенно разные вещи
3. @Ник. Макдермейд У меня есть «сырой» экземпляр, в котором я рассматриваю все как один тип данных. Отсюда я выполняю необходимые преобразования и моделирование, чтобы переместить данные в «структурированный» экземпляр. Исходя из контекста, это послужило бы решением моей проблемы 🙂
4. Это разумный подход. Возможно, вы захотите использовать
TRY_CONVERT
, чтобы вы могли элегантно фиксировать любые проблемы с форматированием5. Преобразование данных, включающих смещение часового пояса, в тип данных datetime неверно. Вы должны использовать тип данных datetimeoffset, что упростит процесс. Вам вообще не нужно будет конвертировать, просто убедитесь, что строка находится в правильном формате (например: ‘2021-05-18 14:39:05.1790734 -04:00’).