Добавьте дни к определенной дате

У меня есть база данных, где по какой-то причине даты вводятся как 1yymmdd. Меня попросили создать поле в запросе, которое добавляет 30 дней к этой дате. Я преобразовал дату в читаемый формат следующим образом:

SUBSTRING(Datefield, 4, 2) + '/' + SUBSTRING(Datefield, 6, 2) 
    + '/' + SUBSTRING(Datefield, 2, 2) AS LookLikeDate

Я поместил это в представление, и попытался тогда:

DATEADD(dd,30, CONVERT(datetime, v.[LookLikeDate], 103)

Я получаю ошибку, которая говорит

Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона.

Затем я попытался определить в своем операторе View, чтобы это поле было datetime с начала:

CONVERT(datetime, SUBSTRING(Datefield, 4, 2) + '/' 
    + SUBSTRING(Datefield, 6, 2) + '/' 
    + SUBSTRING(Datefield, 2, 2), 103) AS LookLikeDate

Когда я получил ошибку в этом определении, где я вообще не мог использовать представление, я изменил дату и время на Char(8), что дало мне ту же ошибку varchar, которую я получил ранее.

Я ошибаюсь, и есть ли способ добавить эти дни в этот смешной формат даты?

1 ответ

Решение

Просто добавить 30 дней, которые вы можете сделать

SELECT DATEADD(dd, 30, RIGHT(datefield, 6)) NewDate
  FROM table1

Чтобы добавить 30 дней и конвертировать обратно в этот формат, используйте

SELECT '1'+ CONVERT(VARCHAR(6), DATEADD(dd, 30, RIGHT(datefield, 6)), 12) NewDate
  FROM table1

Если бы у вас были следующие данные образца

| DATEFIELD |
|-----------|
|   1130801 |
|   1130812 |
|   1120827 |

Тогда результат двух вышеупомянутых запросов будет

|                          NEWDATE |
|----------------------------------|
| 31 августа 2013 00:00:00+0000 |
| 11 сентября 2013 00:00:00+0000 |
| 26 сентября 2012 00:00:00+0000 |

а также

| NEWDATE |
|---------|
| 1130831 |
| 1130911 |
| 1120926 |

соответственно.

Вот демоверсия SQLFiddle

Другие вопросы по тегам