2024-02-04 08:00:03

MySQL LIKE IN()?

我当前的查询是这样的:

SELECT * FROM fiberbox f WHERE f.fiberBox LIKE '%1740 %' OR f.fiberBox LIKE '%1938 %' OR f.fiberBox LIKE '%1940 %'

我环顾了一下,找不到任何类似于LIKE IN()的东西——我想象它是这样工作的:

SELECT * FROM fiberbox f WHERE f.fiberbox LIKE IN('%140 %', '%1938 %', '%1940 %')

什么好主意吗?我是不是想错了问题——一些我从未见过的模糊命令。

MySQL 5.0.77-community-log


当前回答

这是正确的:

SELECT * FROM table WHERE field regexp concat_ws("|",(
"111",
"222",
"333"
));

其他回答

只要注意任何尝试REGEXP使用“LIKE IN”功能的人。

IN允许你做:

field IN (
'val1',
'val2',
'val3'
)

在REGEXP中,这是行不通的

REGEXP '
val1$|
val2$|
val3$
'

它必须像这样在一行中:

REGEXP 'val1$|val2$|val3$'

你可以创建一个内联视图或临时表,用你的值填充它,然后发出这个:

SELECT  *
FROM    fiberbox f
JOIN    (
        SELECT '%1740%' AS cond
        UNION ALL
        SELECT '%1938%' AS cond
        UNION ALL
        SELECT '%1940%' AS cond
        ) с
ON      f.fiberBox LIKE cond

然而,这可以为你返回多行纤维盒,类似于' 1740,1938 ',所以这个查询更适合你:

SELECT  *
FROM    fiberbox f
WHERE   EXISTS
        (
        SELECT  1
        FROM    (
                SELECT '%1740%' AS cond
                UNION ALL
                SELECT '%1938%' AS cond
                UNION ALL
                SELECT '%1940%' AS cond
                ) с
        WHERE   f.fiberbox LIKE cond
        )

正则表达式可以帮助你得到想要的结果。

SELECT fiberbox from fiberbox where fiberbox REGEXP '[1740|1938|1940]';

我们可以测试上面的查询请点击SQL小提琴

SELECT fiberbox from fiberbox where fiberbox REGEXP '[174019381940]';

我们可以测试上面的查询请点击SQL小提琴

对不起,mysql中没有类似LIKE IN的操作。

如果你想在没有连接的情况下使用LIKE操作符,你必须这样做:

(field LIKE value OR field LIKE value OR field LIKE value)

你知道,MySQL不会优化这个查询,供你参考。

REGEXP可能更有效,但您必须对其进行基准测试,例如。

SELECT * from fiberbox where field REGEXP '1740|1938|1940';