SQL: Select 行包含一个词
SQL: Select rows that contain a word
目标是select所有包含一些特定单词的行,可以在字符串的开头或结尾and/or被白色-space包围,不应该在换句话说,可以这么说。
我的数据库中有几行:
+---+--------------------+
| 1 | string with test |
+---+--------------------+
| 2 | test string |
+---+--------------------+
| 3 | testing stringtest |
+---+--------------------+
| 4 | not-a-test |
+---+--------------------+
| 5 | test |
+---+--------------------+
所以在这个例子中,select输入单词 test
,应该 return 第 1、2 和 5 行。
问题是由于某种原因,SELECT * FROM ... WHERE ... RLIKE '(\s|^)test(\s|$)';
returns 0 行。
我哪里错了,也许,如何做得更好?
编辑: 查询也应该 select 只包含一个词的行 test
.
我第一个问题的答案是:
我没有转义特殊字符,所以 \s
应该是 \s
.
工作查询:SELECT * FROM ... WHERE ... RLIKE '(\s|^)test(\s|$)';
。 (或者只是 space ( |^)
/( |$)
,也可以)
SELECT * FROM ...
WHERE ... LIKE 'test';
这应该可以解决问题。
这是你想要的吗?
SELECT * FROM ... WHERE ... LIKE
'%test%';
您好,您可以使用尾随 space 和前导 space
SELECT * from new_table
where text RLIKE(' test')
union
SELECT * from new_table
where text RLIKE('test ')
REGEXP_INSTR()
函数是 INSTR()
函数的扩展,可能用于版本 10.0.5+ case-insensitively
作为默认值:
SELECT *
FROM t
WHERE REGEXP_INSTR(str, 'TeSt ')>0
OR REGEXP_INSTR(str, ' tESt')>0
使用词边界测试:
在 MySQL 8.0 之前,在 MariaDB 中:
WHERE ... REGEXP '[[:<:]]test[[:>:]]'
MySQL 8.0:
WHERE ... REGEXP '\btest\b'
(如果这不起作用,将反斜杠加倍;这取决于客户端是否在 MySQL 获取反斜杠之前折叠反斜杠。)
请注意,此解决方案也适用于标点符号,例如 "foo, test, bar"
中的逗号
目标是select所有包含一些特定单词的行,可以在字符串的开头或结尾and/or被白色-space包围,不应该在换句话说,可以这么说。
我的数据库中有几行:
+---+--------------------+
| 1 | string with test |
+---+--------------------+
| 2 | test string |
+---+--------------------+
| 3 | testing stringtest |
+---+--------------------+
| 4 | not-a-test |
+---+--------------------+
| 5 | test |
+---+--------------------+
所以在这个例子中,select输入单词 test
,应该 return 第 1、2 和 5 行。
问题是由于某种原因,SELECT * FROM ... WHERE ... RLIKE '(\s|^)test(\s|$)';
returns 0 行。
我哪里错了,也许,如何做得更好?
编辑: 查询也应该 select 只包含一个词的行 test
.
我第一个问题的答案是:
我没有转义特殊字符,所以 \s
应该是 \s
.
工作查询:SELECT * FROM ... WHERE ... RLIKE '(\s|^)test(\s|$)';
。 (或者只是 space ( |^)
/( |$)
,也可以)
SELECT * FROM ... WHERE ... LIKE 'test';
这应该可以解决问题。
这是你想要的吗?
SELECT * FROM ... WHERE ... LIKE
'%test%';
您好,您可以使用尾随 space 和前导 space
SELECT * from new_table
where text RLIKE(' test')
union
SELECT * from new_table
where text RLIKE('test ')
REGEXP_INSTR()
函数是 INSTR()
函数的扩展,可能用于版本 10.0.5+ case-insensitively
作为默认值:
SELECT *
FROM t
WHERE REGEXP_INSTR(str, 'TeSt ')>0
OR REGEXP_INSTR(str, ' tESt')>0
使用词边界测试:
在 MySQL 8.0 之前,在 MariaDB 中:
WHERE ... REGEXP '[[:<:]]test[[:>:]]'
MySQL 8.0:
WHERE ... REGEXP '\btest\b'
(如果这不起作用,将反斜杠加倍;这取决于客户端是否在 MySQL 获取反斜杠之前折叠反斜杠。)
请注意,此解决方案也适用于标点符号,例如 "foo, test, bar"
中的逗号