首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite3案例与类陈述困难

SQLite3案例与类陈述困难
EN

Stack Overflow用户
提问于 2018-02-21 03:21:54
回答 1查看 56关注 0票数 1

我在sqlite3上有一个声明,这给我带来了一点麻烦。我在一定程度上理解为什么它不起作用,我只需要想出一个解决办法。我有一个列,里面有标题。有些标题以“The”作为前缀。我想跳过“这个”,抓住下一个相关的角色。基本上,我想用字母A获取所有的结果,例如“深渊”。我想忽略‘和空格’,看看下一个字母是否与搜索相关。然而,并不是所有的标题都以' the‘作为前缀,这是我的sqlite3语句。我知道它不起作用,因为我只是按列中的第一个字符进行搜索,因此不可能看到“偶数”是否存在。我怎么才能把这事做好?

代码语言:javascript
复制
SELECT *,CASE WHEN substr(MovieTitle,1,4) = 'The ' THEN
substr(MovieTitle,5) ELSE MovieTitle END FROM Movies WHERE MovieTitle LIKE 'a%'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-21 05:01:07

所以,如果我搜索'a‘,它应该会出现'The Abyss’,而'c‘则会出现'The Croods’。您可以将CASE语句与实现结果的位置结合起来,.Also注意我添加的lower()函数,以便捕捉单词'The‘- 'the’或'The‘的所有变体

代码语言:javascript
复制
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

代码语言:javascript
复制
$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());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48897695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档