Crystal报表中SQL参数字段中的日期转换

时间:2012-04-20 15:30:29

标签: crystal-reports crystal-reports-xi

我有一个Crystal报告(版本XI r3),它使用SQL命令对象来检索其数据。在命令对象中,我有一个日期参数。我的数据库使用“日期”字段存储为YYYYMMDD格式的数值,因此我将参数指定为数字,并添加了一个提示,说“以YYYYMMDD格式输入日期”。

我的用户对此不太关心;他们希望能够使用日期选择器和/或能够以MM / DD / YYYY格式输入日期。

到目前为止我的调查让我相信,如果我将参数转换为真正的日期数据类型,我将无法在SQL命令对象中使用它,因为我无法从日期转换它到SQL语句中的数字,所以我必须在Crystal Select向导中而不是在我的SQL语句中进行日期范围控制,这可能会使我的报告减慢一个数量级或两个数量级(因为我是点击由此日期字段编制索引的表,并且每天有大量记录。

我错了吗?有没有办法让用户以MM / DD / YYYY格式输入日期,并且仍能在我的SQL命令对象中将其用作数字YYYYMMDD参数?

1 个答案:

答案 0 :(得分:2)

我担心您必须修改原始Command以使用日期参数替换numeric参数,并在Command本身内执行从date到number的转换。

所以,在命令中:

WHERE MyDate = {?MyNumberParam)

会变成:

WHERE MyDate = (YEAR({?MyDateParam})*10000) + (MONTH({?MyDateParam})*100) + DAY({?MyDateParam})

最后一部分将2012年4月20日转换为(2012 * 10000 + 4 * 100 + 20)= 20120420,我相信这是你想要的。