7

簡単だと思ったことをやろうとしていますが、行き詰まっています。基本的には、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 \n\t\t\t\t\t\tadd_number,' ',add_street,'\n'\n\t\t\t\t\tELSEIF ( x_street_1 != '' && x_"

私の空のフィールド ('') 表記が気に入らないようです。しかし、理由はわかりません。そのように CONCAT 内で IF ステートメントを使用することはできませんか?

洞察をありがとう。

4

3 に答える 3

12

IIRC、使用したい構文は

IF(condition, expression_if_true, expression_if_false)

私は間違っているかもしれませんが、あなたはそれを試してみたいかもしれません。

于 2013-01-25T17:14:20.707 に答える
5

構文が正しくありません。使用したい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 |
-----------------------------------------------
| | 位置
10 通りを追加
市、州 国
 | |

@を見つけて置き換えるだけです。

于 2013-01-25T17:16:12.593 に答える
2

これも役立つかもしれません:

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

于 2013-01-25T18:01:33.190 に答える