我在sqlite3上有一个声明,这给我带来了一点麻烦。我在一定程度上理解为什么它不起作用,我只需要想出一个解决办法。我有一个列,里面有标题。有些标题以“The”作为前缀。我想跳过“这个”,抓住下一个相关的角色。基本上,我想用字母A获取所有的结果,例如“深渊”。我想忽略‘和空格’,看看下一个字母是否与搜索相关。然而,并不是所有的标题都以' the‘作为前缀,这是我的sqlite3语句。我知道它不起作用,因为我只是按列中的第一个字符进行搜索,因此不可能看到“偶数”是否存在。我怎么才能把这事做好?
SELECT *,CASE WHEN substr(MovieTitle,1,4) = 'The ' THEN
substr(MovieTitle,5) ELSE MovieTitle END FROM Movies WHERE MovieTitle LIKE 'a%'发布于 2018-02-21 05:01:07
所以,如果我搜索'a‘,它应该会出现'The Abyss’,而'c‘则会出现'The Croods’。您可以将CASE语句与实现结果的位置结合起来,.Also注意我添加的lower()函数,以便捕捉单词'The‘- 'the’或'The‘的所有变体
SELECT * from movies WHERE
(
CASE WHEN lower( substr( MovieTitle,1,4) ) = 'the '
THEN
substr( MovieTitle,5)
ELSE MovieTitle END COLLATE NOCASE
) like 'C%'
COLLATE NOCASE
`COLLATE NOCASE` Above will catch all variations of the next word like 'Croods' - 'croods' or ' CroodS'PHP
$sql = "SELECT * from movies WHERE
(
CASE WHEN lower( substr( MovieTitle,1,4) ) = 'the '
THEN
substr( MovieTitle,5)
ELSE MovieTitle END COLLATE NOCASE
) like :searchText
COLLATE NOCASE";
$db = new SQLite3('mydb.db');
$stmt = $db->prepare($sql);
$stmt->bindValue(':searchText', $keyword . '%' , SQLITE3_TEXT); //$keyword is user typed
$result = $stmt->execute();
var_dump($result->fetchArray());https://stackoverflow.com/questions/48897695
复制相似问题