SQL:多个字符串替换(在第二个大写字母开头的大写字母前面添加一个空格)

时间:2016-04-17 17:02:21

标签: mysql sql

我用错误的字符串更新了Name_Table.column_2数据。我使用'JohnSmith'更新了John Smith,而不是John Smith'

现在我想替换多个字符串,例如:'JohnSmith''John Smith''JohnDoe''John Doe'等。

我不熟悉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

2 个答案:

答案 0 :(得分: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 :(得分:1)

如果您的名字始终采用FirstnameLastname的格式 你可以做这样的自定义功能

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/

然后使用这样的UPDATE。

UPDATE table1 SET column_2 = breakup_name(column_2);

sqlfiddle

P.S。在sqlfiddle中我使用/作为分隔符,你必须根据你的分隔符改变它。

上述函数会在大写字母前面添加一个空格(以第二个大写字母开头),例如,如果你有TommyJaeSmith,它将返回Tommy Jae Smith。< / p>

这个函数的逻辑很简单,它遍历并查看每个字母。如果字母是大写字母,它会增加一个帐数,如果帐数大于或等于2(意思是第二个大写字母或之后),它会在字母前面添加一个空格......以便连接起来。