loading..
Русский    English
21:50
листать

Функции 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 DATEADD 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 Больше тэгов
Учебник обновлялся
несколько дней назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100