Прямой sql. Вычислить даты начала и конца месяца

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
mwoland

Прямой sql. Вычислить даты начала и конца месяца

Сообщение mwoland »

Доброго времени суток. Имеется запрос на прямом sql следующего вида:

Код: Выделить всё

Sql select dsopr from katsopr
Необходимо получить даты начала и конца месяца от даты dsopr в формате атлантиса, т.е. в итоге должно получиться что-то вроде

Код: Выделить всё

Sql select dsopr, month_first_date(dsopr), month_last_date(dsopr) from katsopr
Даты нужно вычислять без использования своих процедур на бд. Платформа ms sql.
Кто-нибудь решал подобный вопрос?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой sql. Вычислить даты начала и конца месяца

Сообщение Den »

ну как то извращенно можно как то так попробовать

Код: Выделить всё

sql select
    nrec
   ,dsopr
   ,cast('01'||'/'||case when MONTH(datetime(dsopr, 0))>=10 then '' else '0' end ||MONTH(datetime(dsopr, 0))||'/'||YEAR(datetime(dsopr, 0)) as string) as mesbeg
   ,cast(case
           when MONTH(datetime(dsopr, 0)) in (1,3,5,7,8,10,12)  then '31'
           when MONTH(datetime(dsopr, 0)) in (4,6,9,11) then '30'
           else '28'  // а тута еще высокосные могут быть )
         end
          ||'/'||case when MONTH(datetime(dsopr, 0))>=10 then '' else '0' end ||MONTH(datetime(dsopr, 0))||'/'||YEAR(datetime(dsopr, 0)) as string) as mesend
   from katsopr where  vidsopr=201  and dsopr>=#date(01,01,2014)
   ;
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Прямой sql. Вычислить даты начала и конца месяца

Сообщение Zver »

Недавно решал подобную проблему с использованием функций даты и времени для MS SQL.
Надо было получить первое число некоторого месяца.

идея сводится к использованию функции dateadd. Вот реализация, надеюсь пригодится.

Declare @ReportDate as date = GetDate();
Declare @SkladNelikvDate as integer = master.dbo.DateToGalDate( DATEADD(month, -3 , @ReportDate) );--Дата для неликвидов на складе
--Пелучаем дату первого числа для месяца по неликвидам
Declare @Nelik_Date as date = master.dbo.GalDateToDate(@SkladNelikvDate); -- для простоты следующего выражения
declare @DateForSaldMoun as integer = master.dbo.DateToGalDate( dateadd( DAY, -datePart(day, @Nelik_Date) + 1, @Nelik_Date));
Программист-самоучка
mwoland

Re: Прямой sql. Вычислить даты начала и конца месяца

Сообщение mwoland »

Спасибо за ответы. Но. При реализации предложенной den'ом мы получаем дату не в формате атлантис, а строку (ну и конкретное утяжеление запроса как для чтения так и для его выполнения). Реализация предложенная zver'ем через dateadd классическая и правильная, но требует объявления своей процедуры и соответствующего ее подключения к галке, тк dateadd не доступна в прямом sql галки. Видимо, без своей процедуры не получится.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой sql. Вычислить даты начала и конца месяца

Сообщение Den »

"Даты нужно вычислять без использования своих процедур на бд" (с)

я думал Вам приницпиален по каким то причинам был этот момент- как входнео условие задачи. А так ,канешн, процедуру и все гуд будет
mwoland

Re: Прямой sql. Вычислить даты начала и конца месяца

Сообщение mwoland »

Да, крайне не хотелось использовать процедуры. Спасибо, что попытались решить задачу без их использования.
Ответить