Crystal 报告类似 [a-z][0-9][a-z][a-e]
Crystal Reports LIKE [a-z][0-9][a-z][a-e]
我正在为 table 中的 select 条记录创建报告,其中字符串字段与特定模式匹配。
我需要的记录显示在网格中,因此我可以看到大约有 50 条记录应该 selected。从 Access 获取记录的查询使用 WHERE Product_Description_Short LIKE '[a-z][0-9][a-z][a-e]'
然后当我尝试将其放入 Crystal select 离子公式时,没有返回任何记录。
"{Product_Costs.Product_Description_Short} LIKE '[a-z][0-9][a-z][a-e]'"
我需要如何调整 selection 公式以允许我 select 与 SQL 查询中相同的记录?
删除 selection 公式完全显示了 table 中的所有记录,因此肯定是查询出错了。
Crystal Reports不支持正则表达式,但是你可以使用一些字符串函数来实现你想要的。
还有一个类似的问题 link 到 regex-library:
Crystal reports: is there a way to regex in crystal reports?
以下公式使用了 Crystal 报表的一些基本字符串函数:
示例 1:
此公式适用于字符范围。这里的问题是还包括其他字符(例如像 ä ö ü
这样的元音变音)。
如果这不是您想要的,那么 "Example 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-codes,因此可以排除 umlaut-characters。
ASCII-codes
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]
我正在为 table 中的 select 条记录创建报告,其中字符串字段与特定模式匹配。
我需要的记录显示在网格中,因此我可以看到大约有 50 条记录应该 selected。从 Access 获取记录的查询使用 WHERE Product_Description_Short LIKE '[a-z][0-9][a-z][a-e]'
然后当我尝试将其放入 Crystal select 离子公式时,没有返回任何记录。
"{Product_Costs.Product_Description_Short} LIKE '[a-z][0-9][a-z][a-e]'"
我需要如何调整 selection 公式以允许我 select 与 SQL 查询中相同的记录?
删除 selection 公式完全显示了 table 中的所有记录,因此肯定是查询出错了。
Crystal Reports不支持正则表达式,但是你可以使用一些字符串函数来实现你想要的。
还有一个类似的问题 link 到 regex-library:
Crystal reports: is there a way to regex in crystal reports?
以下公式使用了 Crystal 报表的一些基本字符串函数:
示例 1:
此公式适用于字符范围。这里的问题是还包括其他字符(例如像 ä ö ü
这样的元音变音)。
如果这不是您想要的,那么 "Example 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-codes,因此可以排除 umlaut-characters。
ASCII-codes
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]