我在sqlite3中有一条声明给我带来了一些麻烦。我部分理解为什么它不起作用,我只需要找出一个解决方案。我有一列包含标题。有些标题以“ The”作为前缀。我想跳过“ The”并抓住下一个相关角色。基本上,我想用字母A来获取所有结果。例如“ The Abyss”。我想忽略“ The”和空格,看看下一个字母是否与搜索有关。但是,并非所有标题都带有“ The”前缀。这是我的sqlite3语句。我知道这是行不通的,因为我仅按列中的第一个字符进行搜索,因此无法查看是否存在“ The”。我该如何工作?
SELECT *,CASE WHEN substr(MovieTitle,1,4) = 'The ' THEN
substr(MovieTitle,5) ELSE MovieTitle END FROM Movies WHERE MovieTitle LIKE 'a%'
最佳答案
因此,如果我搜索“ a”,则应调出“ The Abyss”,使用“ c”,则应调出“ The Croods”。您可以将CASE语句与WHERE结合使用以获得结果。还要注意,我添加的lower()
函数是为了捕获单词'The'-'the'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());
关于php - SQLite3 CASE和LIKE语句的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48897695/