Страница 1 из 1

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

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

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

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

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

Sql select dsopr, month_first_date(dsopr), month_last_date(dsopr) from katsopr
Даты нужно вычислять без использования своих процедур на бд. Платформа ms sql.
Кто-нибудь решал подобный вопрос?

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

Добавлено: 29 апр 2014, 06:08
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)
   ;

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

Добавлено: 29 апр 2014, 13:25
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));

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

Добавлено: 29 апр 2014, 14:46
mwoland
Спасибо за ответы. Но. При реализации предложенной den'ом мы получаем дату не в формате атлантис, а строку (ну и конкретное утяжеление запроса как для чтения так и для его выполнения). Реализация предложенная zver'ем через dateadd классическая и правильная, но требует объявления своей процедуры и соответствующего ее подключения к галке, тк dateadd не доступна в прямом sql галки. Видимо, без своей процедуры не получится.

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

Добавлено: 29 апр 2014, 15:10
Den
"Даты нужно вычислять без использования своих процедур на бд" (с)

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

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

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