2012-10-30 55 views
1

在我的数据库中,我有一个类型为varchar(8)的日期字段,我用它来存储格式为YYYYMMDD的日期值。我有困难创建一个简单的CR式显示在以下格式的时间范围:水晶报表中优雅的字符串日期(范围)转换

2012年10月1日到2012年10月31日

这是我的当前和非常缺乏吸引力CR式:

stringvar yYear; 
stringvar mMonth; 
datevar OrigDate; 
numbervar StartDay; 
stringvar EndDay; 

yYear := Mid ({Command.Date}, 1, 4); 

select Mid ({Command.Date}, 5, 2) 
case "01": mMonth:= "January" 
case "02": mMonth:= "Februry" 
case "03": mMonth:= "March" 
case "04": mMonth:= "April" 
case "05": mMonth:= "May" 
case "06": mMonth:= "June" 
case "07": mMonth:= "July" 
case "08": mMonth:= "August" 
case "09": mMonth:= "September" 
case "10": mMonth:= "October" 
case "11": mMonth:= "November" 
case "12": mMonth:= "December"; 

OrigDate := CDate(ToNumber({Command.Date}[1 to 4]), ToNumber({Command.Date}[5 to 6]), ToNumber({Command.Date}[7 to 8])); 
StartDay := ToNumber({Command.Date}[7 to 8]); 
EndDay := Mid(ToText(DateSerial(Year(OrigDate), Month(OrigDate) +1, 1-1)), 4, 2); 

mMonth + " " + ToText(StartDay, "#") + ", " + yYear + " to " + mMonth + " " + EndDay + ", " + yYear 

这样做很有效,但本着可维护性和良好/干净编码实践的精神,如果可能的话,我想简化这个功能。

我相对较新的水晶书面报告,所以我希望我没有“重新发明轮子”。

回答

0

试试这个:

local numbervar year := tonumber(left({Command.Date},4)); 
local numbervar month:= tonumber(mid({Command.Date},5,2)); 
local numbervar day := tonumber(right({Command.Date},2)); 
local datevar stDate := date(year,month,day); 
local datevar endDate := dateserial(year,month+1,day-1); //get last day of month 

totext(stDate,"MMMM d, yyyy") + " to " + totext(endDate,"MMMM d, yyyy") 
+0

谢谢瑞恩。我知道必须有一个更简单的解决方案。过度思考的危险...... – 8thWonder

0

烘干机的解决方案?

创建一个自定义函数:

// YYYYMMDD() 
// Convert a value in 'YYYYMMDD' to a Date 
Function (Stringvar value) 

    Date(ToNumber(value[1 to 4]), ToNumber(value[5 to 6]), ToNumber(value[7 to 8])) 

创建的起始日期的公式:

//{@Starting Date} 
YYYYMMDD({Command.Date}) 

创建的结束日期的公式:

//{@Ending Date} 
// find first day of current month, add a month, subtract a day, truncate time 
Date(DateAdd("m", 1, Date(Year({@Starting Date}), Month({@Starting Date}), 1)) - 1) 

嵌入这两个公式域在文本字段中并根据需要格式化每个字段(增加灵活性)。