【问题标题】:SQL Match individual word?SQL 匹配单个单词?
【发布时间】:2017-02-10 11:23:24
【问题描述】:

我正在使用 like 语句:%word%,但问题是它也匹配其他单词中的单词。

我怎样才能像这样匹配字符串中与其他单词分开的单词。我想在这些字符串中匹配 word1:

word1 word2 word3

word2 word1 word3

word2 word3 word1

不要匹配这个:word2word1

【问题讨论】:

标签: php sql


【解决方案1】:

您可以使用INSTR 函数来获取所需的字符串

WHERE column_name = INSTR(column_name,'word')

INSTR - Instring 函数匹配函数中提供的字符串。此功能不是使用 like 运算符,而是为您提供所需的结果。与 INSTR 函数相比,like 运算符搜索所有可能的组合并花费更多时间。为了提高性能,可以使用 INSTR 函数。

【讨论】:

  • 希望你明白了
【解决方案2】:

在通用 SQL 中执行此操作的最简单方法如下:

where ' ' || col || ' ' like '% word1 %'

请注意,字符串连接的运算符可能因数据库而异。

【讨论】:

    【解决方案3】:

    主要思想是:也匹配空间。

    col LIKE '% doc %' OR col LIKE '% doc' OR col LIKE 'doc %' OR col = 'doc'
    

    【讨论】:

    • 谢谢,但我担心它也会匹配其他单词的出现!是否有可能定期扩展它。如果不是 100% 匹配跳过?
    • @letsforum 抱歉,无法关注您。你能举个例子解释你的意思吗?
    • 对不起,伙计。我的意思是如果我使用这个: col LIKE '% doc %' OR col LIKE '% doc' OR col LIKE 'doc %' OR col = 'doc' 它将匹配 100% 整个单词并跳过该单词在其他的? LIKE '% doc' 将返回以我的单词开头的单词以匹配等。
    • @letsforum 不,我不这么认为。 % doc 只匹配 abcd[space]doc,不匹配 abcddoc 也不匹配 abc docefg
    • @letsforum 了解更多信息,请参阅 mysql 文档。
    猜你喜欢
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多