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

在SSRS中使用LIKE或CONTAINS判断两列是否包含于另一列

SSRS表达式判断字段包含关系的正确实现

首先,你的原表达式存在几处语法和逻辑错误,具体问题及修正方案如下:

原表达式的问题

  • 拼写错误:Field!column1.value 应为 Fields!column1.Value(复数Fields,属性名首字母大写Value)
  • 方法调用错误:.lower().tostring() 顺序颠倒且不符合.NET命名规范,应改为 .ToString().ToLower()
  • 通配符误用:String.Contains 方法不需要*通配符,它直接匹配子串,加*会把星号当成普通字符去匹配
  • 括号不匹配:逻辑判断的括号未正确闭合,or的位置导致逻辑结构混乱
  • 函数混用:lcase是VBA函数,在SSRS表达式中建议统一使用.NET的字符串方法

正确的实现方式

方式1:使用.NET的String.Contains方法(推荐)

该方法直接判断子串是否存在,无需通配符,写法简洁高效:

=IIF(
    Fields!column3.Value.ToString().ToLower().Contains(Fields!column1.Value.ToString().ToLower()) 
    OR 
    Fields!column3.Value.ToString().ToLower().Contains(Fields!column2.Value.ToString().ToLower()),
    "Yes",
    "No"
)

说明:统一转小写是为了忽略大小写匹配,如果需要严格区分大小写,去掉.ToLower()即可。

方式2:使用VBA的Like运算符(模拟SQL LIKE逻辑)

如果你习惯SQL的LIKE语法,也可以用SSRS支持的Like运算符,此时需要用*作为通配符:

=IIF(
    LCase(Fields!column3.Value) Like "*" & LCase(Fields!column1.Value) & "*"
    OR
    LCase(Fields!column3.Value) Like "*" & LCase(Fields!column2.Value) & "*",
    "Yes",
    "No"
)

说明:LCase用于统一转小写,忽略大小写;如果要区分大小写,去掉LCase即可。

额外注意事项

  • 如果字段可能为Null,建议先做空值判断,避免报错,比如:
=IIF(
    (Not IsNothing(Fields!column1.Value) AndAlso Fields!column3.Value.ToString().ToLower().Contains(Fields!column1.Value.ToString().ToLower()))
    OR
    (Not IsNothing(Fields!column2.Value) AndAlso Fields!column3.Value.ToString().ToLower().Contains(Fields!column2.Value.ToString().ToLower())),
    "Yes",
    "No"
)
  • 优先推荐方式1,因为.Contains是.NET原生方法,性能和兼容性更好。

内容的提问来源于stack exchange,提问作者EMPOWER EXCEL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:37:04