我希望代表用户在我的 SQL 查询中分隔 Crystal Reports 变量,以便他们可以提供格式为"customer1, customer2, customer 3"
vs.的输入"'customer1', 'customer2', customer3'"
。REPLACE()
通过将 Crystal Reports 参数传递给查询中的andCONCAT()
函数,我可以代表用户格式化字符串。当我将代码放在选择列表中时,字符串会被适当地格式化以在IN
表达式中使用。但是,一旦我将代码迁移到IN
子句,查询就不会返回任何行。我已将选择列表中的输出复制并粘贴到IN
语句中,并且按预期返回了行。我试图在我的 SQL 客户端中针对字符串文字而不是参数执行相同的代码,结果相同,这意味着这不是特定于 Crystal Reports。
select
customer.custid,
customer.name
from pub.customer
where customer.custid IN (
CONCAT('''', CONCAT(RTRIM(LTRIM(
REPLACE('{?customer_param}', ',', ''','''))), '''')))
该代码只是将逗号替换为 ',' 并在参数值的开头和结尾附加一个单引号。在我的选择列表中,代码返回:'customer1','customer2'。
我知道这种方法在性能方面并不理想。
SQL 驱动程序标准(SQL-92,通过 ODBC 的 1 级合规性) DB:Progress 32 位 db(带有 SQL 抽象层的 ABL Native) 应用程序:Epicor 9.05