选择MM-YYYY日期,选择2个月的第一天和最后一天

时间:2011-05-04 00:06:28

标签: sql sql-server crystal-reports

我一直在帮助某人更改水晶报告,而且我们都对使用它有半知识,至少足以让这个一次性的帮助过去。

他们要求我们改变的是取消以MM / YYYY-MM / YYYY格式输入一天的能力。我们试图弄清楚如何选择第一个日期部分的第一天和最后一个日期部分的最后一天/小时。

我见过一些像dateadd()这样的函数,其中包含其他函数,最终产生当前月份的最后一天或第一天。但是我不确定如何输入我们给出的日期(MM / YYYY)到函数中以获取第一天/最后一天。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

假设您的参数名称为{?dates}

{@ starting_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);

{@ ending_date}公式:

//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;