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
    fiberbox f
    JOIN (
    SELECT
        substring_index( substring_index( '1740,1938,1940', ',', help_topic_id + 1 ), ',',- 1 ) AS sub_ 
    FROM
        mysql.help_topic 
    WHERE
        help_topic_id <(
            length( '1740,1938,1940' )- length(
            REPLACE ( '1740,1938,1940', ',', '' ))+ 1 
        ) AS b 
        ) ON f.fiberBox LIKE concat('%',
    b.sub_,
    '%')

其他回答

这是正确的:

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$'

Regexp方法与值列表

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

翻转操作数

'a,b,c' like '%'||field||'%'

你也可以这样用:

 SELECT
    * 
FROM
    fiberbox f
    JOIN (
    SELECT
        substring_index( substring_index( '1740,1938,1940', ',', help_topic_id + 1 ), ',',- 1 ) AS sub_ 
    FROM
        mysql.help_topic 
    WHERE
        help_topic_id <(
            length( '1740,1938,1940' )- length(
            REPLACE ( '1740,1938,1940', ',', '' ))+ 1 
        ) AS b 
        ) ON f.fiberBox LIKE concat('%',
    b.sub_,
    '%')