首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite:有没有办法在SELECT子句中进行条件OR / COALESCE?

问sqlite:有没有办法在SELECT子句中进行条件OR / COALESCE?
EN

Stack Overflow用户
提问于 2011-11-28 00:08:12
回答 4查看 4.6K关注 0票数 3

我有以下的看法:

代码语言:javascript
复制
CREATE VIEW FilmTableView AS

    SELECT  (TitleSP || " / " || TitleEN) as Title,  
            CompanyName, 
            CoverURI,
            CompanyFilmRelation.CompanyId,
            CompanyFilmRelation.FilmId 

    FROM    Film
    JOIN    CompanyFilmRelation on CompanyFilmRelation.FilmId = Film.FilmId 
    JOIN    Company on CompanyFilmRelation.CompanyId = Company.CompanyId 

    ORDER BY Title;

但我可能会得到TitleSP或TitleEN为空的记录。在这种情况下,我只想包括任何不为空的列,并且不包括"/“。

有没有办法做到这一点?也就是说,遵循以下逻辑的东西:

代码语言:javascript
复制
if(TitleSP && TitleEN)
   select (TitleSP || " / " || TitleEN) as Title
else
   select (TitleSP ? TitleSP : TitleEn) as Title
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-28 04:12:16

代码语言:javascript
复制
SELECT CASE WHEN (TitleSP = '' OR TitleSP IS NULL)
                THEN COALESCE(TitleEN, '')
            WHEN (TitleEN = '' OR TitleEN IS NULL)
                THEN TitleSP
            ELSE (TitleSP || ' / ' || TitleEN)
       END AS Title, 
...
票数 2
EN

Stack Overflow用户

发布于 2011-11-28 00:12:39

在sql中,如果一个运算符是null,那么表达式就变成null,您可以将其与coalesce函数一起使用来轻松解决此问题。像这样的东西应该可以工作(nb未测试):

代码语言:javascript
复制
   COALESCE(TitleSP || " / " || TitleEN,TitleSP,TitleEN,"No Title") as Title

如果你不能这样做,那么case是可行的,就像这样(也可以处理空字符串):

代码语言:javascript
复制
  TitleSP || 
  CASE WHEN ((ISNULL(TRIM(TitleSP),"") = "") OR (ISNULL(TRIM(TitleEN),"") = "")) THEN "" ELSE " / " END || 
  TitleEN as Title
票数 4
EN

Stack Overflow用户

发布于 2011-11-28 17:28:38

代码语言:javascript
复制
SELECT COALESCE(
                NULLIF(TitleSP, '') || ' / ' || NULLIF(TitleEN, ''), 
                NULLIF(TitleSP, ''), 
                NULLIF(TitleEN, ''), 
                ''
               ), 
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8286891

复制
相关文章

相似问题

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