Функция 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 до первого числа месяца
спросил
Изменено 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, просто потому, что он более удобочитаем и не требует вычислений даты.
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;
Я использовал следующие ссылки, чтобы написать ответ.