Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка при преобразовании к smalldatetime  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Сегодня наткнулся на очень неприятную ошибку при преобразовании к smalldatetime: если время 23:59:59, то к дате прибавляется один день.

declare @dt datetime='20150401 23:59:59'

SELECT CAST(@dt as smalldatetime)


Результат: 2015-04-02 00:00:00

Проверял на Microsoft SQL Server 2008 R2 (SP3) и Microsoft SQL Server 2014 - 12.0.2000.8 (X64)

В документации ничего на этот счет не встретил. Может я чего-нибудь не знаю про преобразование типов?
1 апр 15, 10:17    [17457676]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании к smalldatetime  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ruuu
В документации ничего на этот счет не встретил.

Даже то, что точность этого типа составляют минуты и значения автоматически округляются до этой точности ?
1 апр 15, 10:21    [17457697]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании к smalldatetime  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
SELECT CAST('2015-04-01 23:59:29' AS smalldatetime), CAST('2015-04-01 23:59:30' AS smalldatetime)
1 апр 15, 10:24    [17457712]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании к smalldatetime  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Glory,

В статье CAST AND CONVERT из округления дат есть только про float - > datetime и datetime - > int

Сейчас внимательнее посмотрел статью про smalldatetime и там про это есть: Диапазон времени 2007-05-09 23:59:59 округляется до 2007-05-10 00:00:00
1 апр 15, 10:33    [17457791]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании к smalldatetime  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Ruuu
В документации ничего на этот счет не встретил
https://msdn.microsoft.com/en-us/library/ms182418.aspx
ss is two digits, ranging from 00 to 59, that represent the second. Values that are 29.998 seconds or less are rounded down to the nearest minute, Values of 29.999 seconds or more are rounded up to the nearest minute.
1 апр 15, 10:36    [17457811]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при преобразовании к smalldatetime  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ruuu
Glory,

В статье CAST AND CONVERT

Причем тут эти функции ? Это есть в описании smalldatetime. Вы его читали ?
1 апр 15, 10:36    [17457816]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить