Функция SQL Server FLOOR()

В SQL Server функция FLOOR() возвращает ближайшее целое число, которое меньше или равно указанному числу или числовому выражению.

Функция FLOOR() в основном используется для округления значения с плавающей запятой без дробной части от значения числа с плавающей запятой (десятичное, двойное, плавающее).

 ЭТАЖ(номер)
 

Параметры

номер: Допустимое числовое выражение. Недопустимое значение битового типа.

Возвращаемое значение

Возвращает тот же тип, что и входное выражение.

Пример 1:

В следующем примере используется функция FLOOR() для положительного и отрицательного числового значения.

 ВЫБЕРИТЕ ЭТАЖ (23,34) КАК PosInt, ЭТАЖ (-23,34) КАК NegInt;
 

В приведенном выше примере FLOOR(23.34) возвращает 23, поскольку это ближайшее и наименьшее целочисленное значение, чем 23,34.

Таким же образом ЭТАЖ(-23,34) возвращает -24, поскольку -24 меньше -23,34.

Пример 2:

В следующем примере ноль и ввод меньше единицы передаются в качестве параметров функции FLOOR.

 ВЫБЕРИТЕ ЭТАЖ (0,01) КАК PosInt, ЭТАЖ (0,00) КАК Результат;
 

Пример 3:

Вы можете передать числовое выражение, как показано ниже.

 ВЫБЕРИТЕ ЭТАЖ(1,6 * 2) КАК Результат;
 

Пример 4:

Следующий пример демонстрирует разницу между функциями FLOOR() и CEILING() .

 ВЫБРАТЬ ЭТАЖ(23.34) AS FloorResult, CEILING(23.34) AS CeilingResult;
 

В следующей таблице перечислены различия между функциями CEILING() и FLOOR() для разных входных значений:

Входное значение ПОТОЛОК() ПОЛ()
12,0 12 12
12. 2 13 12
12,5 13 12
12.12345 13 12
-12,0 -12 -12
-12,2 -12 -13
-12,5 -12 -13
Хотите проверить, насколько хорошо вы знаете SQL Server?

Запуск теста SQL Server

sql server — полные даты SQL до первого числа месяца

спросил

Изменено 2 года, 11 месяцев назад

Просмотрено 551 раз

У меня есть даты в следующем формате:

 2019-09-01 00:00:00. 000
2019-09-02 00:00:00.000
2019-10-22 00:00:00.000
 

Я хочу сократить даты, чтобы получить следующее:

 2019-09-01 00:00:00.000
2019-09-01 00:00:00.000
2019-10-01 00:00:00.000
 

Как я могу сделать это в операторе select? Я пробовал DATEPART , но могу извлечь только номер месяца.

  • SQL-Server
  • Дата

Другой вариант: Используйте DateFromparts :

 Выберите DateFromparts (год (DateColumn), месяц (DateColumn), 1).
ОТ ИмяТаблицы;
 

Я предпочитаю этот вариант подходу EOMonth() , предложенному в ответе gvee, просто потому, что он более удобочитаем и не требует вычислений даты.

1

EOMonth() твой друг!

 ВЫБРАТЬ '2019-10-22 00:00:00.000' КАК исходное_значение
     , EOMonth('2019-10-22 00:00:00.000') AS end_of_month
     , DateAdd(dd, 1, EOMonth('2019-10-22 00:00:00.000')) AS start_of_next_month
     , DateAdd(mm, -1, DateAdd(dd, 1, EOMonth('2019-10-22 00:00:00.
000'))) AS start_of_this_month ;

Чтобы сохранить тот же формат даты и времени, вы можете использовать DATEADD(month, DATEDIFF(month, 0, your_date_column), 0)

Этот метод подсчитывает количество месяцев с 0-го дня (01.01.1900) до исходной даты, затем добавляет это количество месяцев до 0-го дня, что возвращает начало месяца

5

В SQL нет прямой функции для нахождения первого дня месяца, но можно использовать функцию LAST_DAY() для его вычисления, выполнив следующие действия: Сначала получите последний день месяца даты. Во-вторых, добавьте 1 день, чтобы получить первый день следующего месяца, используя функцию DATE_ADD(). В-третьих, вычтите 1 месяц, чтобы получить первый день месяца даты. Наконец, отформатируйте рассчитанную дату в формате гггг-мм-дд ЧЧ:мм:сс по мере необходимости

Следующий запрос показывает, как получить первый день месяца 2017-07-14.

 ВЫБЕРИТЕ DATE_FORMAT(DATE_ADD(DATE_ADD(LAST_DAY('2017-07-14'),
  ИНТЕРВАЛ 1 ДЕНЬ),
  ИНТЕРВАЛ - 1 МЕСЯЦ),
  "%Y-%m-%d %T") AS first_day;
 

Я использовал следующие ссылки, чтобы написать ответ.