【发布时间】:2014-10-02 17:45:54
【问题描述】:
我的 MySQL 数据库中有很多书。我正在寻找特定的书名。例如,我知道如何找到每个标题都以“dan”开头的:
SELECT * FROM books WHERE header LIKE 'dan%';
但是如何在标题中找到以某个短语开头的单词(子字符串)?
提前致谢。
【问题讨论】:
我的 MySQL 数据库中有很多书。我正在寻找特定的书名。例如,我知道如何找到每个标题都以“dan”开头的:
SELECT * FROM books WHERE header LIKE 'dan%';
但是如何在标题中找到以某个短语开头的单词(子字符串)?
提前致谢。
【问题讨论】:
稍微简化一下是下面的逻辑,在header的开头放了一个空格:
SELECT *
FROM books
WHERE ' ' || header LIKE ' dan%';
唯一的问题是连接字符串取决于数据库,并且问题没有提到数据库。所以也可能是:
WHERE ' ' + header LIKE ' dan%';
或
WHERE CONCAT(' ', header) LIKE ' dan%';
【讨论】:
这是一个快速而肮脏的技巧:以dan 开头的单词可以在header 的开头或在空格之后,所以:
SELECT * FROM books WHERE header LIKE 'dan%' OR header like '% dan%';
【讨论】:
trim(),然后使用like?因为header like '% dan%'在逻辑上意味着单词dan可以出现在标题中的任何位置,而不必出现在开头。
trim 来处理像Rahul and dan are browsing StackOverflow 这样的标题? '% dan%' 中 dan 之前的空格验证它是单词的开头。
check if dan is a separate word +1