SQL,将LIKE查询放在一起

时间:2018-09-26 07:41:31

标签: mysql sql sqlite

SELECT name
FROM TV
WHERE name LIKE '%Day%'
AND name NOT LIKE '%Days%'
            AND name NOT LIKE '%Hayday%'
            AND name NOT LIKE '%Payday%'
            AND name NOT LIKE '%Doomsday%'

如何合并最近的3个查询,以便除了单独的单词之外,单词“ day”不包含在任何单词中?

5 个答案:

答案 0 :(得分:3)

空格是字符串的一部分...假设您正在短语中搜索, 或在开始或结束时。这是一个简单的案例解决方案,假设没有标点符号,只有文本和空格。 那么解决方案应该是这样的:

SELECT name
FROM Track
WHERE name (name  LIKE '% Day %') OR (name  LIKE '% Day') OR (name  LIKE 'Day %')
;

答案 1 :(得分:3)

如果您使用的是MySQL,则可以使用RLIKE (REGEXP)通过创建带有单词边界的表达式来仅与单词本身进行匹配:

SELECT name
FROM TV
WHERE name REGEXP '[[:<:]]Day[[:>:]]'

请注意,REGEXP区分大小写,因此也将与“ day”一词匹配。

如果您使用的是SQLite,则可能已经安装了REGEXP,在这种情况下,此解决方案也应适用。如果没有,this question会指导您如何安装它。

答案 2 :(得分:0)

在您的查询中,您可以直接使用如下字符串代替“ Like”关键字     “ where name ='time'

答案 3 :(得分:0)

您可以使用FIND_IN_SET

SELECT name
FROM Track
WHERE name LIKE '%Time%'
AND FIND_IN_SET(name,"Times,Playtime,Summertime,Wartime")<0

答案 4 :(得分:0)

假设“单独”是指被空格包围,那么最简单的方法可能是:

SELECT name
FROM TV
WHERE ' ' || name || ' ' LIKE '% Day %';

(或者您的数据库执行字符串连接。)

如果“单独”仅表示单词边界,那么正则表达式是最好的方法。