Страница 1 из 1
Прямой sql. Вычислить даты начала и конца месяца
Добавлено: 28 апр 2014, 19:12
mwoland
Доброго времени суток. Имеется запрос на прямом sql следующего вида:
Необходимо получить даты начала и конца месяца от даты 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
Да, крайне не хотелось использовать процедуры. Спасибо, что попытались решить задачу без их использования.