sqlite: есть ли способ сделать условное ИЛИ / COALESCE в предложении SELECT? - PullRequest
3 голосов
/ 27 ноября 2011

У меня есть следующее представление:

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 пусты.В таком случае я бы хотел включить только тот столбец, который не является пустым, и не включать "/".

. Есть ли способ сделать это?То есть что-то, следуя логике:

if(TitleSP && TitleEN)
   select (TitleSP || " / " || TitleEN) as Title
else
   select (TitleSP ? TitleSP : TitleEn) as Title

Ответы [ 4 ]

4 голосов
/ 27 ноября 2011

В sql, если один оператор равен нулю, выражение становится пустым, вы можете использовать это с функцией coalesce, чтобы легко решить эту проблему.Что-то вроде этого должно работать (не проверено):

   COALESCE(TitleSP || " / " || TitleEN,TitleSP,TitleEN,"No Title") as Title

Если вы не можете сделать это таким образом, то дело в случае, то что-то вроде этого (также будет обрабатывать пустые строки):

  TitleSP || 
  CASE WHEN ((ISNULL(TRIM(TitleSP),"") = "") OR (ISNULL(TRIM(TitleEN),"") = "")) THEN "" ELSE " / " END || 
  TitleEN as Title
2 голосов
/ 28 ноября 2011
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, 
...
1 голос
/ 28 ноября 2011
SELECT COALESCE(
                NULLIF(TitleSP, '') || ' / ' || NULLIF(TitleEN, ''), 
                NULLIF(TitleSP, ''), 
                NULLIF(TitleEN, ''), 
                ''
               ), 
...
0 голосов
/ 28 ноября 2011

Используйте функцию IFNULL .

CREATE VIEW FilmTableView AS

    SELECT  ifnull((TitleSP || " / " || TitleEN), ifnull(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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...