MSSQL, округление до 10 минут
От: Anton Batenev Россия https://github.com/abbat
Дата: 14.08.06 03:45
Оценка:
Hello, All!

Требуется произвольное значение типа datetime округлить до дня, часа, 10 минут, минуты, отбросив остаток. Например

для значения
01.01.2001 10:11:10.100

округление до дня:       01.01.2001 00:00:00.000
округление до часа:      01.01.2001 10:00:00.000
округление до 10 минут:  01.01.2001 10:10:00.000
округление до минуты:    01.01.2001 10:11:00.000


Понятно, что тип datetime хранится как 8-и байтовый float, где целая часть — это количество дней с 1900 года. Но вот, что меня смущает:

SET DATEFORMAT DMY
DECLARE @d DATETIME
SET @d = '01.01.2001 10:10:00.000'
SELECT @d, CAST(CAST(@d AS FLOAT) AS DATETIME)


Результат:

+-------------------------+--------------------------+
| 2001-01-01 10:10:00.000 | 2001-01-01 10:09:59.997 |
+-------------------------+--------------------------+


1. Чего я неправильно понимаю? Ведь каст между одним и тем же типом не должен приводить к смене значения?
2. Как все же сделать окургление наиболее правильно, при условии, что функция будет использоваться достаточно интенсивно и в больших запросах, и конвертация в символьное представление мне как-то не особо нравится.
Folding@Home on TSC! Russia
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.