【问题标题】:How to use column name as part of a LIKE statement in a WHERE clause of a JOIN如何在 JOIN 的 WHERE 子句中使用列名作为 LIKE 语句的一部分
【发布时间】:2013-05-11 18:15:54
【问题描述】:
LEFT OUTER JOIN [INVENTTRANS]
ON #TEMP.VOUCHERPHYSICAL=[INVENTTRANS].VOUCHERPHYSICAL
WHERE [INVENTTRANS].ITEMID = #Temp.INVENTDIMID

这几乎为我提供了我正在寻找的结果。由于INVENTDIMID 在某些情况下附加了一个后缀,因此消除了大约 1/4 的预期结果。

在类似于此意图的类似子句中成功的正确语法是什么。

WHERE '[INVENTTRANS].ITEMID%' like #Temp.INVENTDIMID

或者,如果没有短手方法可以做到这一点,那么最有效的长手方法是什么。

谢谢

【问题讨论】:

    标签: tsql sql-server-2008-r2 sql-like


    【解决方案1】:

    我不确定我是否完全理解了这个问题,但您似乎想将谓词应用于类似的语句,该语句比较固定的而不是您提供的文本中的其他内容。

    我总是这样做:

    Where (ColumnName) like '%' + (OtherColumnName) + '%'
    

    这基本上是在您尝试关联的列的任一侧应用通配符。它适用于变量或列。

    13 年 5 月 21 日更新

    两个表变量的简单示例,可自行填充并在第二个表变量上使用通配符匹配。代码将在 SQL Management Studio 中的 SQL 2008 或更高版本上按原样运行:

    declare @Person Table ( personID int identity, person varchar(8));
    
    insert into @Person values ('Brett'),('Sean'),('Chad'),('Michael'),('Ray'),('Erik'),('Queyn');
    
    declare @Match table ( Description varchar(4));
    
    insert into @Match values ('B'), ('S'),('e')
    
    Select top 100
        p.*
    ,   m.Description as 'MatchedOn'
    from @Person p, @Match m
    where p.person like '%' + m.Description + '%'
    

    【讨论】:

    • 这接近我的意图。我曾希望将通配符应用于列内的内容。 300794 匹配 300794 344411 匹配 34441125
    • 这应该可以工作,请查看更新的示例以进行进一步审查。
    • 谢谢你的例子。我颠倒了操作的顺序,并在较短的结果中寻找较长结果的实例。看来我还有其他问题,但你帮助我消除了一个选项。谢谢。
    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多