Добавьте дни к определенной дате
У меня есть база данных, где по какой-то причине даты вводятся как 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