Выбор первого и последнего дня из 2 отдельных месяцев только с учетом даты ММ-ГГГГ - PullRequest
0 голосов
/ 04 мая 2011

Я помогал кому-то изменять отчеты о кристаллах, и у нас обоих есть полу знания об их использовании, по крайней мере, достаточно, чтобы получить эту разовую помощь.

Что-то у них естьпопросил нас изменить, чтобы убрать возможность ввода дня в формате ММ / ГГГГ-ММ / ГГГГ.Мы пытаемся выяснить, как выбрать первый день первого раздела даты и самый последний день / час последнего раздела даты.

Я видел несколько функций, таких как dateadd (), с другимифункции внутри которых в конце производят последний или первый день текущего месяца.Но я не уверен, как ввести указанную дату (ММ / ГГГГ) в функцию, чтобы получить первые / последние дни.

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

Предполагая, что имя вашего параметра равно {? Date}

{@ начальная_дата} формула:

//extract MM/YYYY from 'MM/YYYY-MM/YYYY'
local stringvar MMYYYY := Split({?dates},"-")[1];
//extract MM from 'MM/YYYY'
local numbervar MM := ToNumber(Split(MMYYYY,"/")[1]);
//extract YYYY from 'MM/YYYY'
local numbervar YYYY := ToNumber(Split(MMYYYY,"/")[2]);
//return first day of selected date
Date(YYYY,MM,1);

{@ окончание_даты} формула:

//extract MM/YYYY from 'MM/YYYY-MM/YYYY'
local stringvar MMYYYY := Split({?dates},"-")[2];
//extract MM from 'MM/YYYY'
local numbervar MM := ToNumber(Split(MMYYYY,"/")[1]);
//extract YYYY from 'MM/YYYY'
local numbervar YYYY := ToNumber(Split(MMYYYY,"/")[2]);
//calculate first day of selected month, add a month, subtract a day, return last day of selected month
DateAdd("m",1,Date(YYYY,MM,1))-1;
2 голосов
/ 04 мая 2011
declare @date1 varchar(7),@date2 varchar(7)
set @date1='01/2011'
set @date2='05/2011'

-- First convert your dates to YYYYMM
set @date1=RIGHT(@date1,4)+LEFT(@date1,2)
set @date2=RIGHT(@date2,4)+LEFT(@date2,2)

-- Then calculate your limit dates
-- The final date is obtained by adding 1 month to the first day of this month
-- and then substracting 1 second to this date
select CONVERT(datetime, @date1+'01',112) InitialDate,
       CONVERT(datetime, dateadd(ss,-1,dateadd(mm,1,@date2+'01')),112) FinalDate
...