You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSRS中如何实现单字段多关键词通配符搜索?

解决方案

这里提供两种可行的实现方式,分别对应分号分隔的单参数输入和多值参数手动输入的场景:

方法1:使用分号分隔的单文本参数

这种方式让用户在单个参数输入框中用分号分隔多个关键词(比如delayed;discharge),通过SQL的字符串拆分函数验证所有关键词是否同时存在于目标字段中。

修改后的SQL语句

WHERE 
    -- 处理未输入关键词的情况,返回全部数据
    (@Action IS NULL OR @Action = '')
    OR EXISTS (
        SELECT 1
        FROM STRING_SPLIT(@Action, ';') AS Keywords
        -- 过滤掉空的关键词(比如用户输入连续分号的情况)
        WHERE LTRIM(RTRIM(Keywords.Value)) <> ''
          AND FilteredActivityPointer.regardingobjectidname LIKE '%' + LTRIM(RTRIM(Keywords.Value)) + '%'
        -- 确保所有非空关键词都匹配成功
        HAVING COUNT(DISTINCT LTRIM(RTRIM(Keywords.Value))) = (
            SELECT COUNT(DISTINCT LTRIM(RTRIM(Value))) 
            FROM STRING_SPLIT(@Action, ';') 
            WHERE LTRIM(RTRIM(Value)) <> ''
        )
    )

参数设置

  • 在报表参数属性中,将@Action的类型设为文本,无需勾选“允许多值”。
  • 用户输入示例:delayed;discharge

方法2:使用多值参数手动输入

虽然没有下拉列表,但SSRS的多值参数允许用户手动输入多个关键词(逐个添加或用逗号分隔输入),报表会自动将参数值转换为集合,再通过SQL验证全匹配。

修改后的SQL语句

WHERE 
    (@Action IS NULL OR (SELECT COUNT(1) FROM @Action) = 0)
    OR EXISTS (
        SELECT 1
        FROM @Action AS Keywords
        WHERE LTRIM(RTRIM(Keywords.Value)) <> ''
          AND FilteredActivityPointer.regardingobjectidname LIKE '%' + LTRIM(RTRIM(Keywords.Value)) + '%'
        HAVING COUNT(DISTINCT LTRIM(RTRIM(Keywords.Value))) = (
            SELECT COUNT(DISTINCT LTRIM(RTRIM(Value))) 
            FROM @Action 
            WHERE LTRIM(RTRIM(Value)) <> ''
        )
    )

参数设置

  • 在报表参数属性中,勾选“允许多值”,类型设为文本。
  • 用户输入方式:
    1. 点击参数输入框旁的下拉按钮,逐个输入关键词并添加;
    2. 直接在输入框中用逗号分隔输入多个关键词(比如delayed,discharge)。

注意事项

  • 若使用SQL Server以外的数据库,STRING_SPLIT可能无法使用,需替换为对应数据库的字符串拆分函数(比如MySQL的SUBSTRING_INDEX,Oracle的REGEXP_SUBSTR)。
  • 两种方法都加入了空值和空关键词的处理,避免因无效输入导致查询出错。

内容的提问来源于stack exchange,提问作者Paula Morrison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:10:16