MySQL CONCAT несколько полей с оператором IF
Я пытаюсь сделать что-то, что я думал, будет просто, но я застрял. Я в основном хочу создать одно поле адреса из нескольких полей адресной части, используя оператор IF для использования адреса или пересечения. Вот мое заявление, чтобы сделать поле:
CONCAT(loc_name,'n',
IF ( add_number != '' && add_street != '' ) THEN
CONCAT(add_number,' ',add_street,'n')
ELSEIF ( x_street_1 != '' && x_street_2 != '' ) THEN
CONCAT(x_street_1,' & ',x_street_2,'n')
END IF
,city,', ',
IF ( state != '') THEN
CONCAT(state,' ',country,'n')
ELSEIF ( x_street_1 != '' && x_street_2 != '' ) THEN
CONCAT(country,'n')
END IF
) AS loc_info
но ему совсем не нравится то, что я делаю, он выдает ошибку:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') THEN nttttttadd_number,' ',add_street,'n'ntttttELSEIF ( x_street_1 != '' && x_"
похоже, ему не нравится моя пустая нотация поля ("). Но я не знаю, почему. Могу ли я не использовать IF заявление внутри такого КОНКАТА?
Спасибо за любое понимание.
3 ответов
синтаксис неверен. Вы хотите использовать CASE
:
SET @loc_name = 'Location';
SET @add_street = 'Add Street';
SET @add_number = '10';
SET @x_street_1 = 'Street 1';
SET @x_street_2 = 'Street 2';
SET @city = 'City';
SET @state = 'State';
SET @country = 'Country';
SELECT Concat(@loc_name, '\n', CASE
WHEN @add_number != ''
AND @add_street != '' THEN
Concat(@add_number, ' ', @add_street, '\n')
WHEN @x_street_1 != ''
AND @x_street_2 != '' THEN
Concat(@x_street_1, ' & ', @x_street_2,
'\n')
end, @city, ', ', CASE
WHEN @state != '' THEN
Concat(@state, ' ', @country, '\n')
WHEN ( @x_street_1 != ''
AND @x_street_2 != '' ) THEN Concat(@country, '\n')
end) AS loc_info
результат
| LOC_INFO | ----------------------------------------------- | Location 10 Add Street City, State Country |
просто найти и заменить @
С .
IIRC, синтаксис, который вы хотите использовать, -
IF(condition, expression_if_true, expression_if_false)
Я могу ошибаться, но вы можете попробовать это.
Это также может помочь:
CONCAT(loc_name,'\n',
IF ( add_number != '' && add_street != '' ,
CONCAT(add_number,' ',add_street,'\n'),
IF ( x_street_1 != '' && x_street_2 != '' ,
CONCAT(x_street_1,' & ',x_street_2,'\n'),""
)
),
city,
',' ,
IF ( state != '',
CONCAT(state,' ',country,'\n'),
IF ( x_street_1 != '' && x_street_2 != '' ,
CONCAT(country,'\n'),""
)
) AS loc_info
также, что вы сравниваете здесь state != ''
это против значений null??
если так это даст вам неправильный ответ вы должны использовать state IS NOT NULL
вместо этого.