Преобразование столбца эпох с указанием даты и времени на сервере SQL - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть столбец с секундами эпохи (тип данных varchar), который мне нужно преобразовать в формат даты и времени. У меня проблемы с использованием функции dateadd().

UPDATE A
SET A.departure = DATEADD(s, departure, '1970-01-01 00:00:00')
FROM TABLE A

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

Недопустимый тип данных аргумента varchar для аргумента 2 функции dateadd

Два вопроса:

  1. Правильно ли я использую функцию dateadd()?
  2. Во что следует преобразовать тип данных столбца, чтобы он работал? Я пытался преобразовать в int, но это не сработало

1 Ответ

0 голосов
/ 05 февраля 2020

Это то, что вам нужно?

Кажется, что время вашей эпохи, к сожалению, хранится в виде строкового значения. Использование TRY_CAST позволит вам преобразовать значения, которые можно преобразовать из строк, в целое число, которое вы можете добавить, используя DATEADD.

Если у вас есть опция, было бы предпочтительнее взять это преобразованное значение и сохраните его в новом столбце с правильным типом данных DATE или DATETIME, чтобы в будущем вы больше не столкнулись со строками.

UPDATE A
SET A.departure = DATEADD(SECOND, TRY_CAST(departure AS bigint), '1970-01-01 00:00:00')
FROM TABLE A

На самом деле, после ввода этого, Обновление этой исходной колонки не очень хорошая идея. Для значений, где departure не может быть преобразовано, функция вернет NULL, и вы потеряете данные. Вам нужно будет сделать некоторые проверки здесь, чтобы избежать проблем.

Как минимум:

SELECT 
 *
FROM TABLE 
WHERE TRY_CAST(departure AS bigint) IS NULL;
...