Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получить последний день месяца / 9 сообщений из 9, страница 1 из 1
14.01.2002, 07:08
    #32020626
jeni
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить последний день месяца
Как попроще получить последний день месяца?
У меня получается сильно наворочено.
Заранее спасибо за ответы!
...
Рейтинг: 0 / 0
14.01.2002, 07:22
    #32020627
SergD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить последний день месяца
select dateadd(month,1,dateadd (day,-1*day(@D),@D))
где @D любая дата нужного Вам месяца

Сергей.
...
Рейтинг: 0 / 0
14.01.2002, 14:01
    #32020659
Михаил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить последний день месяца
А вот если
SET @D='2002-03-15',
то этот select dateadd(month,1,dateadd (day,-1*day(@D),@D))
неправильный
...
Рейтинг: 0 / 0
14.01.2002, 14:27
    #32020665
Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить последний день месяца
select dateadd(dd, -day(@D), dateadd(month, 1, @D))
...
Рейтинг: 0 / 0
15.01.2002, 07:25
    #32020697
Michael
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить последний день месяца
Тестируем (SQL Server 2000):
declare @D datetime
Set @D= '2002-01-29'
select dateadd(dd, -day(@D), dateadd(month, 1, @D))
Получаем:
2002-01-30 00:00:00.000
А должно было бы быть
2002-01-31 00:00:00.000
Отсюда вывод:
Пусть Ваша программа не помещается в одну строчку,
но если она работает правильно - от добра
добра не ищут. У меня есть свои UDF,
определяющие первый и последний день месяца.

CREATE FUNCTION First_Day_Of_Month
(@anInputDate datetime)
/* Возвращает дату первого дня месяца даты */
RETURNS datetime AS
BEGIN
RETURN CONVERT(datetime, '01'+SUBSTRING(CONVERT(char(10), @anInputDate, 104), 3, 10), 104)
-- А можно и так, но тут время не устанавливается в 0, а берется из @anInputDate
-- RETURN dateadd(day, 1-day(@anInputDate), @anInputDate)
END

CREATE FUNCTION Last_Day_Of_Month
(@anInputDate datetime)
RETURNS datetime AS
/* Возвращает дату последнего дня месяца даты */
BEGIN
DECLARE
@anOutputDate datetime
-- Прибавляем к дате 1 месяц и вычисляем дату первого дня месяца
SET @anOutputDate = dbo.First_Day_Of_Month(DATEADD(Month,1,@anInputDate))
-- Вычитаем 1 день
RETURN (@anOutputDate -1)--(DATEADD(Day,(-1),@anOutputDate))
END

Михаил
kasyanov@pilot.ru
...
Рейтинг: 0 / 0
15.01.2002, 08:38
    #32020701
user
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить последний день месяца
select dateadd(day,-1,dateadd(month,1,dateadd(day,-day(@D)+1,@D)))
...
Рейтинг: 0 / 0
15.01.2002, 08:42
    #32020702
Владимир Смирнов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить последний день месяца
А можно так:

declare @D datetime
Set @D= '20020201'
select dateadd(dd, -1, dateadd(month, 1, convert(char(6),@D,112) + '01'))

И вообще, вариантов не счесть и лучшего среди них наверное нет.
...
Рейтинг: 0 / 0
15.01.2002, 11:40
    #32020719
jeni
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить последний день месяца
Спасибо всем за разнообразие ответов.
Да... Каждому свое. Оказывается у меня
оказался не очень-то навороченный вариант.
...
Рейтинг: 0 / 0
16.01.2002, 12:49
    #32020821
Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить последний день месяца
сорри за предыдущий баг
мне кажется самая короткая строчка будет выглядеть так:
select dateadd(month, 1, @D)-day(dateadd(month, 1, @D))
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Получить последний день месяца / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]