如何使通配符考虑

时间:2015-06-27 20:50:32

标签: mysql sql sqlite android-sqlite

我正在使用一个包含三列的表(ID | NOTE | TAG)

ID-主键

注意 - 有些事情

TAG-包含以空格分隔的值

想象一下 id-1包含TAG- 计算机javaScript java forton手机

和id-2包含TAG- 计算机java forton c ++ android

当使用通配符搜索位于字符串中间的术语 java 时,SQLITE还会显示包含 javascript

的行

我的查询 " LIKE '%" + "java" + "%'";如果在其中的任何地方找到 java 这个词,那么这会显示行(即)它还显示 java 以及 javaScript as Scriptinjava

如何让它只显示 java ??

2 个答案:

答案 0 :(得分:1)

有时,我们会遇到其他人糟糕的设计决定。幸运的是,大多数人都知道将字符串存储在字符串中是一个坏主意。因此,他们使用正确的SQL结构,这是一个每个列表项有一行的表。

但是,我们坚持其他人的错误决定,无法修复底层数据结构,可以使用SQL来做你想做的事情。在MySQL中,您可以将其表达为:

WHERE concat(' ', tags, ' ') LIKE '% '" + "java" + "' %'

(我假设+是您正在使用的应用程序语言中的字符串连接运算符。)

答案 1 :(得分:0)

像这样:

where tags = 'java'
or tags like 'java %' -- starts with java
or tags like '% java %' -- java in the middle
or tags like '% java' -- ends with java