loading..
Русский    English
09:30
листать

Функции CEILING и FLOOR

Функция CEILING

Функция CEILING возвращает наименьшее целое число, которое больше или равно числовому выражению, являющемуся аргументом функции.

Следующий запрос

Консоль
Выполнить
  1. SELECT 6.28 val, CEILING(6.28) pos_val, CEILING(-6.28) neg_val
даст такие результаты:

val    pos_val    neg_val
6.28    7    -6

Возвращаемый функцией результат имеет тот же тип, что и аргумент функции.

Однако рассмотренный пример вроде бы говорит об обратном. Более того, даже выполнив явное преобразование типа для чисел с фиксированной и плавающей точкой, мы получим в результате целое число за исключением константы типа MONEY (в Management Studio):

Консоль
Выполнить
  1. SELECT CEILING(CAST(6.28 AS DEC(6,2))) ex_num,
  2. CEILING(CAST(6.28 AS FLOAT)) apr_num, CEILING($6.28) money_num

ex_num    apr_num    money_num
7    7    7,00

При использовании других клиентских программ/драйверов вы вполне можете получить другое визуальное представление данных. Выполните, например, последний запрос непосредственно в учебнике. Что у вас получилось?

Можно сказать, что формат отображения является лишь "косвенной уликой" относительно вердикта о типе данных результата. Более надежным критерием является объём, который значение занимает в памяти.

Консоль
Выполнить
  1. SELECT DATALENGTH(6.28) val, DATALENGTH(CEILING(6.28)) num_val,
  2. DATALENGTH(CAST(CEILING(6.28) AS INT)) int_val

val    num_val    int_val
5    5    4

Т.е. результат применения функции CEILING занимает в памяти столько же места, что и исходное значение, в то время как результат, явно преобразованный к целому типу, - 4 байта.

Функция FLOOR

Функция FLOOR, напротив, возвращает наибольшее целое число, которое меньше или равно числовому выражению, являющемуся аргументом функции.

Консоль
Выполнить
  1. SELECT 6.28 val, FLOOR(6.28) pos_val, FLOOR(-6.28) neg_val

val    pos_val   neg_val
6.28    6    -7

Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE Convert COUNT CROSS APPLY CTE DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN MONTH MySQL NOT Больше тэгов
Учебник обновлялся
месяц назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100