我正在创建一个报告来选择表格中的字符串字段与特定模式匹配的记录。
我需要的记录显示在网格中,因此我可以看到大约有50条记录应该被选中。从Access获取记录的查询使用WHERE Product_Description_Short LIKE '[a-z][0-9][a-z][a-e]'
当我尝试将其放入Crystal选择公式时,不会返回任何记录。
"{Product_Costs.Product_Description_Short} LIKE '[a-z][0-9][a-z][a-e]'"
如何调整选择公式以允许我选择与SQL查询中相同的记录?
完全删除选择公式会显示表中的所有记录,因此肯定是查询出错了。
答案 0 :(得分:1)
Crystal Reports不支持正则表达式,但您可以使用一些字符串函数来实现您想要的效果。
还有类似的问题与正则表达式库的链接:
Crystal reports: is there a way to regex in crystal reports?
以下公式使用Crystal Reports的一些基本字符串函数:
示例1:
此公式适用于字符范围。这里的问题是还包括其他字符(例如像ä ö ü
这样的变音符号)。
如果这不是你想要的那么"例2"应该工作。
stringVar productDesc := "a3xZ";
Len(productDesc)=4 And
Left(productDesc,1) In "a" To "z" And
Mid(productDesc,2,1) In "0" To "9" And
Mid(productDesc,3,1) In "a" To "z" And
Right(productDesc,1) In "a" To "z"
示例2:
此公式适用于ASCII码,因此可以排除变音字符。
ASCII码
48
到57
是数字[0-9]
65
到90
是大写字符[A-Z]
97
至122
为小写字符[a-z]
stringVar productDesc := "a3xZ";
Len(productDesc)=4 And
Asc(Left(productDesc,1)) In [97 To 122, 65 To 90] And
Asc(Mid(productDesc,2,1)) In 48 To 57 And
Asc(Mid(productDesc,3,1)) In [97 To 122, 65 To 90] And
Asc(Right(productDesc,1)) In [97 To 122, 65 To 90]
所以在第二个例子中,选择公式如下所示:
Len({Product_Costs.Product_Description_Short})=4 And
Asc(Left({Product_Costs.Product_Description_Short},1)) In [97 To 122, 65 To 90] And
Asc(Mid({Product_Costs.Product_Description_Short},2,1)) In [97 To 122, 65 To 90] And
Asc(Mid({Product_Costs.Product_Description_Short},3,1)) In 48 To 57 And
Asc(Right({Product_Costs.Product_Description_Short},1)) In [97 To 122, 65 To 90]