Постановка дела с условием игнорирования postgres 9.3 - PullRequest
0 голосов
/ 28 июня 2018

В моем приложении следующая аббревиатура позволяет мне ввести значение и выбрать его тип в приложении, например,

:input 

в этом случае я создал переменную

:Lang1 as a varchar

У меня есть следующий код, просто спрашивающий, как много людей говорят на определенном языке из массива, используя оператор case

То, что я хочу знать, это то, сколько учеников знает язык из массива, и проверить по полю ввода, имеет ли оно значение внутри него или нет

(Case When Length(:Lang1)>4    --I'm assuming any language has more than 4 letters
then languages[1] = :Lang1     --When this condition statement is true then I get the children 
                   --and the number of children speaking the entered language as a 1st language
else (ignore condition) end)   --Simply trying to ignore the else side of the condition

Я попробовал этот код

(Case When Length(:Lang1)>4 then languages[1] = :Language 
else cast(:Lang1 as varchar(20)) end)

ОШИБКА: символы типа CASE изменяются и логическое значение не может быть сопоставлено

и этот код

(Case When Length(:Lang1)>4 then languages[1] = :Language 
end)

, который произвел кучу 0 0 0s

Эта запись относится к своим бывшим предшественникам Часть 2: как получить сумму запроса на основе разделов без фактического поворота и помещается в следующую область

JOIN schoollevel sl ON sl.id = p.schoollevelid
GROUP BY s.studentnumber, p.firstname
 ) t
Where (Case When Length(:Lang1)>4 then languages[1] = :Lang1
    else cast(:Lang1 as varchar(20)) end)
)
select *

1 Ответ

0 голосов
/ 28 июня 2018
Выражение

A case возвращает значение, а не фрагмент синтаксиса, который можно использовать в качестве условия. Вместо этого вы можете использовать логический оператор or для создания этой логики:

WHERE LENGTH(:Lang1) <= 4 OR languages[1] = :Lang1
...