2016-04-08 2 views
0

Я пытаюсь добавить 13 лет к дате рождения, которая хранится как datetime2, используя следующий синтаксис и (dateadd (yy, 13, isNull (cast (p.birthDTS as datetime), cast ('1/1/1950 'в качестве даты и времени)))> = @ svcStart)ошибка переполнения datetime2

и я получаю Добавление значения в столбец' datetime 'вызвало переполнение.

Я искал макс (p.birthDTS) и он вернулся 1988-10-17 00: 00: 00,0000000

я получил за @svcStart в 2015-04-08 13: 10: 49,193

Я немного смущен. Любая помощь?

ДБ

+0

Что такое значение '' MIN '*' birthDTS'? –

ответ

1

Если вы работаете со значениями, которые DATETIME2 вы можете попробовать литье своих значений DATETIME2 в отличие от DATETIME:

DATEADD(yy,13,ISNULL(CAST(p.birthDTS AS DATETIME2),CAST('1/1/1950' AS DATETIME2))) 

Предполагая, что у вас нет каких-либо неверных данных или аналогичная проблема и данные примера, которые вы предоставили, являются правильными (т. е. самый большой - 1988-10-17), который представляется правильным как seen here:

enter image description here

Я бы удостоверился, что вы дважды проверяете все свои типы данных, чтобы убедиться, что они определены как ожидаемые, и повторите запрос через свои данные, чтобы проверить любые кромки (например, наибольшие и наименьшие значения, возможные нули и т. д.).

0

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

+0

Вы были правы. Максимальная дата рождения в таблице, очевидно, является ошибкой в ​​9999-01-01 00: 00: 00.0000000, но мне нужно проверить, чтобы она исключала ошибку. Большое спасибо за ваш комментарий. – user1795131

+0

@ user1795131 Итак, когда вы сказали: «Я искал max (p.birthDTS), и он вернулся 1988-10-17 00: 00: 00.0000000« ..? –

Смежные вопросы