【问题标题】:Including exact matches in WHERE .. LIKE '%input%'?包括 WHERE .. LIKE '%input%' 中的完全匹配?
【发布时间】:2014-08-26 13:22:54
【问题描述】:

查询看起来像

SELECT TOP 10 order_number WHERE order_number LIKE '%input%';

假设输入为 5,结果将包括 order_number 0500。 假设输入是 0500,结果将不包括 0500,这将是完全匹配的,我需要它在结果中。

有什么解决办法吗?

【问题讨论】:

  • 欢迎来到Stack Overflow。请不要大喊大叫,因为它们很吵,可能会剥夺你的好答案。

标签: sql-server search wildcard sql-like


【解决方案1】:
DECLARE @Input AS INT    
SET @Input = 5

SELECT TOP 10 order_number 
FROM Table
WHERE CONVERT(VARCHAR,order_number) LIKE '%' + CONVERT(VARCHAR,@Input) + '%';

或者最好将输入声明为 VARCHAR,这样您以后就不会转换:

DECLARE @Input AS VARCHAR(10)
SET @Input = '5'

SELECT TOP 10 order_number 
FROM Table
WHERE CONVERT(VARCHAR,order_number) LIKE '%' + @Input + '%';

【讨论】:

    【解决方案2】:

    如果您的 order_number 列中存在值“0500”并且您的 WHERE 子句如下所示:

    WHERE order_number LIKE '%0500%'
    

    然后值“0500”将作为匹配项返回。两端带有通配符的 LIKE 将对包含通配符之间的值的任何内容(包括值本身)返回 true。

    从下面的链接中,通配符表示“任何 0 个或多个字符的字符串”

    参考:http://msdn.microsoft.com/en-us/library/ms179859.aspx

    【讨论】:

    • 我认为它应该,但它没有。然而,Giannis Paraskevopulos 的解决方案是可行的。
    • 我想这取决于您的 order_number 列的数据类型和您的输入参数。这些是什么类型?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多