我在数据库中有一个char(4),我需要将其与报表中的数值范围参数进行比较。具体来说,char表示出生年份,我的报告要求用户搜索一系列年份(例如,1950-2013)
如何使用记录选择来对数据库中的值进行类型转换,然后将其与生成查询的范围进行比较?
我尝试使用:
ToNumber(dbValue) >= Minimum(parameter) and ToNumber(dbValue) <= Maximum(parameter)
答案 0 :(得分:1)
Crystal没有生成SQL查询的那一部分,因为它不是有效的SQL语法,而是Crystal语法。你正在做的事情会起作用,因为客户端而不是服务器必须进行记录过滤,效率会很低。 (因此,遵循的一个好规则是在记录选择公式中使用极少数(如果有的话)Crystal函数,因为Crystal通常无法将它们转换为SQL)。
而是在SQL表达式中进行类型转换。例如:
-- SQL Expression {%YearConversion}
-- Cast using valid PL/SQL syntax
to_number("table"."YearString")
现在,由于您已在有效的SQL中完成转换,因此您可以在记录选择公式中使用它,而不必担心Crystal必须进行过滤。
// Sample line from record selection formula
{%YearConversion} >= {?StartDate} and {%YearConversion} <= {?EndDate}