在SQL查询中查找多个精确的子字符串(Crystal Report)



我正在为查询SQL数据库的Crystal Report编写一个命令。命令将使用从不同程序生成的参数/输入。我以前曾将参数直接放在命令中,但这次必须以不同的方式处理。

所述输入将是具有&介于两者之间,例如:";6&12&15〃;,在这种情况下,次序无关紧要。为了便于理解,我们将说这些数字是产品ID,并且是唯一的。当用户想要在此数据库中搜索多个产品时,上面的字符串将是其外观。

我过去曾将以下代码用于非基于数字的字符串,由于其他字段的设置方式,它运行良好:

CASE WHEN '{?WearhouseState}' = '' THEN 1
WHEN CHARINDEX(Products.WearhouseState,'{?WearhouseState}',0)>0 THEN 1
ELSE 0 
END = 1

该代码将搜索字段的值作为子字符串,基本上在给定输入参数的任何位置,这适用于状态之类的事情,因为";德克萨斯州";永远不会是任何其他状态的子字符串。然而,这与数字不太匹配。例如,如果一个产品的ID为3,那么如果参数为"31",则搜索将返回该记录,我显然不希望这样(它也会返回产品1(。

与此同时,我一直在Crystal Reports中使用分隔符来分割字符串,这很好,但会减慢创建文档的总体时间。我使用的大多数参数都倾向于放在查询中,这大大提高了速度。Crystal代码如下:

{?ProductID}="" or {Command.ProductID} in split({?ProductID},"&")

这完全符合预期,但时间至关重要。可以提供任何附加信息。从技术上讲,它是InterSystemsSQL,所以请记住这一点,因为我知道SQL之间的命令/子句可能会有所不同。

我会在SQL Server中而不是在CR中执行拆分字符串操作。请参阅例如T-SQL拆分字符串以获取工作代码示例。请注意,此逻辑不需要作为函数运行,但也可以将其直接包含在CR命令中。

最新更新