СЛУЧАЙ, КОГДА ПОТОМ РАЗРЕШАЕТСЯ НА НУЛИ В SQLite - PullRequest
0 голосов
/ 30 марта 2019

Я использую SQLite внутри своего приложения .NET, и у меня следующий запрос:

select (CASE IFNULL(CCODE_1, '') when 'STD' then '_' else '' end) + 
(CASE IFNULL(CFRRR_CS, '') when '1' then 'F_' when '2' then 'R_' when '3' then 'FR_' else '' end) + 
IFNULL(CCODE_1, '') +
(CASE when (IFNULL(CCODE_2, '') = '') then '' else '_' end) + 
IFNULL(CCODE_2, '') +
(CASE when (IFNULL(CCODE_3, '') = '') then '' else '_' end) + 
IFNULL(CCODE_3, '') as OptionID
from X20_TIRES

Приведенный выше запрос создает один столбец OptionID со всеми 0.Ничего другого.

А вот некоторые примеры данных из X20_TIRES:

enter image description here

Я ожидаю таких результатов, как:

R_F41A
R_F41V
etc...

Мне ясно, что case/when/then ломается и просто выплевывает нули, но я не могу понять почему.Что я делаю неправильно?Заранее спасибо за любой совет.

1 Ответ

1 голос
/ 30 марта 2019

Если вы хотите объединить все эти результаты из операторов CASE,
Вы должны использовать оператор || вместо +:

select 
  (CASE IFNULL(CCODE_1, '') when 'STD' then '_' else '' end) || 
(CASE IFNULL(CFRRR_CS, '') when '1' then 'F_' when '2' then 'R_' when '3' then 'FR_' else '' end) || 
IFNULL(CCODE_1, '') ||
(CASE when (IFNULL(CCODE_2, '') = '') then '' else '_' end) || 
IFNULL(CCODE_2, '') ||
(CASE when (IFNULL(CCODE_3, '') = '') then '' else '_' end) || 
IFNULL(CCODE_3, '') as OptionID
from X20_TIRES
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...