SQL选择类似column_name的模式

时间:2014-08-11 16:02:02

标签: mysql sql sql-like

是否存在诸如sql查询之类的内容,其结果受限于包含在查询值中。

通常喜欢:

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

我希望它是

SELECT column_name(s)
FROM table_name
WHERE pattern LIKE column_name;

例如:

id   |   val
1    |   c:/tests/one
2    |   c:/tests/two
3    |   c:/

我可以使用'c:/ tests / two / fail / results'进行查询,并返回2和3,因为它们是子字符串。

2 个答案:

答案 0 :(得分:1)

SELECT column_name
FROM table_name 
WHERE instr('c:/tests/two/fail/results', column_name) > 0;

答案 1 :(得分:1)

如果您真的想使用LIKE,那么您可以使用

SELECT 
    * 
FROM
    example
WHERE
    'c:/tests/two/fail/results'
LIKE
    CONCAT(val, '%');

请注意LIKE的右侧是一个模式,你必须将通配符“%”附加到它。

Demo

注意:

当然,juergen的解决方案可以工作,甚至可能更快。

我的解决方案的另一个问题是列val本身可能不包含通配符。现在LIKE的两个外卡字符是

%   Matches any number of characters, even zero characters
_   Matches exactly one character

下划线不仅是文件路径中允许的字符,而且经常被使用。 我强烈建议使用juergen d。

的方法