【问题标题】:Selecting first and last day of 2 separate months only given MM-YYYY date仅在给定 MM-YYYY 日期的情况下选择 2 个不同月份的第一天和最后一天
【发布时间】:2011-05-05 22:19:02
【问题描述】:
我一直在帮助某人更改水晶报告,我们俩都对使用它有半知识,至少足以应付这种一次性帮助。
他们要求我们更改的内容是取消以 MM/YYYY-MM/YYYY 格式输入日期的功能。我们正在尝试弄清楚如何选择第一个日期部分的第一天和最后一个日期部分的最后一天/小时。
我见过一些函数,比如 dateadd() 和其他函数,它们最终生成当月的最后一天或第一天。但我不确定如何将我们获得的日期 (MM/YYYY) 输入到函数中以获取第一天/最后一天。
【问题讨论】:
标签:
sql
sql-server
crystal-reports
【解决方案1】:
假设您的参数名称是 {?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;
【解决方案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