Я имею дело с базой данных sql, где дата записывается в формате «2020-348T08:55». Мне нужно преобразовать это в datetime.
Пожалуйста, направьте, если есть возможный способ сделать это?
С функциями строки и даты/времени извлеките год и дни, чтобы создать DATETIME без времени и, наконец, добавьте часть времени:
SELECT
CAST(DATEADD(
DAY,
CAST(SUBSTRING(LEFT(col, CHARINDEX('T', col) - 1), 6, LEN(col)) AS INTEGER),
DATEFROMPARTS(CAST(LEFT(col, 4) AS INTEGER) - 1, 12, 31)
) AS DATETIME) +
CAST(RIGHT(col, 5) AS DATETIME) AS result
FROM tablename
Если часть дней всегда представляет собой трехзначное число, ее можно упростить:
SELECT
CAST(DATEADD(
DAY,
CAST(SUBSTRING(col, 6, 3) AS INTEGER),
DATEFROMPARTS(CAST(LEFT(col, 4) AS INTEGER) - 1, 12, 31)
) AS DATETIME) +
CAST(RIGHT(col, 5) AS DATETIME) AS result
FROM tablename
Замените col
на название вашего столбца.
Смотрите демо.
Результат:
> | result |
> | :---------------------- |
> | 2020-12-13 08:55:00.000 |
Спасибо за помощь, а теперь как мне сделать обратное, например: 2020-12-13 08:55 на '2020-348T08:55'. При выполнении запроса я хочу установить дату в формате даты и времени и объявить 2020-348T08:55:29.752-05:00
@Студент, это новое требование, для которого вы должны задать новый вопрос.
Типы данных даты и времени не имеют формата, вы говорите, что храните их как другой тип данных? Если это так, вам нужно исправить свой дизайн. Какую дату представляет ваше значение?