2016-04-17 5 views
1

Name_Table.column_2のデータを間違った文字列で更新しました。 「John Smith」の代わりに'JohnSmith'で更新しました。SQL:複数の文字列の置換(第2大文字で始まる大文字の前にスペースを追加)

今私には、例えば、複数の文字列を交換したいと思います:'John Doe'として'John Smith'として'JohnSmith''JohnDoe'など

私はSQLに慣れていないよ、いくつかのいずれかを一度multiple stringsの交換方法で私を助けることができます。

#Name_Table 

Column_1  Column_2 
1    JohnSmith 
2    JohnSmith 
3    JohnDoe 
4    JohnSmith 
5    WayneRooney 
6    JohnDoe 
7    WayneRooney 
8    JohnSmith 
9    WayneRooney 
10   JohnDoe 
+0

フィールド名は何ですか? – RomanPerekhrest

+0

はファーストネームで、lanstnameの最初の文字は常に大文字になりますか? –

+0

@IgorVujovic:はい、常に大文字になります。 – Arun

答えて

2

私はこのような状況のための単一のクエリを知らないが、あなたの問題を解決するための方法の下にしてみてください。私はそれがあなたのためにうまくいくと確信しています。

$sel = mysql_query('SELECT * FROM Name_Table;'); 
while($row = mysqli_fetch_array($sel)){ 
    $string = $row['Column_2']; 
    $count = strlen($string); 
    $strings = array(); 
    $i = 0; 
    $ii = 0; 

    while($i < $count) 
    { 
     $char = $string{$i}; 
     if(ereg("[A-Z]", $char, $val)){ 
      $ii++; 
      $s = ''; 
      $s .= $char; 
     } else { 
      $s .= $char; 
     } 
     $strings[$ii] = $s; 
     $i++; 
    } 
    $name_with_space = implode(' ',$strings); 
    mysql_query('UPDATE Name_Table SET Column_2="'.$name_with_space.'" WHERE Column_1='.$row['Column_1']); 
} 
1

あなたはこの

CREATE FUNCTION breakup_name (fullname varchar(50)) 
RETURNS VARCHAR(50) 
BEGIN 
    SET @fullname = fullname,@newname='',@letter='',@capcount=0,@space=''; 
    WHILE LENGTH(@fullname)>0 DO 
    SET @letter = LEFT(@fullname,1); 
    SET @space = ''; 
    IF @letter RLIKE BINARY '[A-Z]' THEN 
     SET @capcount = @capcount+1; 
     IF @capcount >= 2 THEN SET @space = ' '; END IF; 
    END IF; 
    SET @newname = CONCAT(@newname,@space,@letter); 
    SET @fullname = RIGHT(@fullname,LENGTH(@fullname)-1); 
    END WHILE; 
    RETURN @newname; 
END/ 

のようなカスタム関数を行うことができます あなたの名前は常につもりFirstnameLastnameの形式であることがされている場合、このようなUPDATEを使用します。

UPDATE table1 SET column_2 = breakup_name(column_2); 

sqlfiddle

P.S.デリミタとして使用したsqlfiddleでは、デリミタに応じて変更する必要があります。

大文字の前に大文字(大文字の頭文字で始まる)の前にスペースが追加されます。たとえば、TommyJaeSmithの場合、Tommy Jae Smithが返されます。

この機能のロジックは非常に簡単で、ループして各文字を表示します。文字が大文字の場合は、大文字になります。大文字の数字が2以上(大文字の2文字目以降)であれば、文字の前に連結するスペースを追加します。

関連する問題