0

分割された列テーブルで氏名を検索できる方法を探しています

私が試した:例えば「マイケル・ピーター・ジョンソン」

select firstName,middleName,lastName 
from staff 
where concat(firstName, ' ', middlename, ' ', lastname) Like "%michael peter johnson%"

それは機能しますが、名前が"michael johnson" 機能しない場合、連結名が作成されます。"michael (double space)johnson" したがって、連結は2つのスペースを作成し、一致しません。

これを解決する別の方法を知っている人はいますか?

編集:文字列「マイケル・ピーター・ジョンソン」はユーザー入力フィールドであるという考えです。そのため、この検索バーのアイデアではない 3 つの別々の文字列に分割することはできません

Edit2: ミドルネームが「NULL」で、NU:: を使用した concat(firstName, ' ', middlename, ' ', lastname) の結果が NULL であるため、見つからないことにも気付きました。

そのための解決策はありますか?

Thxマティ

4

4 に答える 4

2

あなたはこれを行うことができます:

select firstName, middleName, lastName 
from staff 
where concat(firstName, ' ', middlename, ' ', lastname) Like "%michael%peter%johnson%"

しかし、私はあなたが欲しいと思います:

select firstName, middleName, lastName 
from staff 
where firstName like '%michael%' and
      middleName like '%peter%' and
      lastName like '%johnson%';

または、データベースの値にスペースが含まれているように見えるため、おそらく次のようになります。

select firstName, middleName, lastName 
from staff 
where trim(firstName) = 'Michael' and
      trim(middleName) = 'Peter' and
      trim (lastName) = 'Johnson';

編集:

または、次のようにすることもできます。

where concat(trim(firstName), ' ', trim(middlename), ' ', trim(lastname)) Like concat('%', 'michael peter johnson', '%')
于 2013-08-24T19:15:18.903 に答える
2

Replaceもう1つのオプションです:

select firstName,middleName,lastName 
from staff 
where replace(concat(firstName, ' ', middlename, ' ', lastname), '  ', ' ') Like "%michael peter johnson%"
于 2013-08-24T19:22:25.340 に答える
1

あなたがマイケル・ジョンソンと一緒に検索するなら。これを行う

     select name, midle, last 
     from staff
     where concat(name, ' ', midle, ' ', last) Like "%michael%johnson%"

ここで遊ぶデモ

編集:

 select firstName,middleName,lastName 
 from table1
 where (firstName Like "%michael%" AND lastName  LIKE "%johnson%" )
于 2013-08-24T19:20:31.510 に答える
0

最も効率的なソリューションではないかもしれませんが、あなたの要件にはうまくいくはずです:

select firstName, midlename, lastname 
from staff
where replace(concat(ifnull(firstName, ''), ifnull(middlename, ''), ifnull(lastname, '')), ' ', '') = replace('michael peter johnson', ' ', '');
于 2013-08-24T19:45:02.880 に答える