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

Mysql SQL:多字符串替换(在大写字母前添加一个空格,以第二个大写字母开头),mysql,sql,Mysql,Sql,我用错误的字符串更新了Name\u表.column\u 2数据。我更新的不是“约翰·史密斯”,而是“约翰·史密斯” 现在我想替换多个字符串,例如:'JohnSmith'为'JohnSmith','JohnDoe'为'JohnDoe'等 我不熟悉SQL,有人能帮我一次替换多个字符串吗 #Name_Table Column_1 Column_2 1 JohnSmith 2 JohnSmith 3 JohnDoe 4

我用错误的字符串更新了
Name\u表.column\u 2
数据。我更新的不是“约翰·史密斯”,而是“约翰·史密斯”

现在我想替换多个字符串,例如:
'JohnSmith'
'JohnSmith'
'JohnDoe'
'JohnDoe'

我不熟悉
SQL
,有人能帮我一次替换
多个字符串吗

#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

我不知道这种情况下的单一查询,但请尝试以下方法来解决您的问题。我相信这对你很好

$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']);
}
$sel=mysql\u查询('SELECT*FROM Name\u Table;');
while($row=mysqli\u fetch\u数组($sel)){
$string=$row['Column_2'];
$count=strlen($string);
$strings=array();
$i=0;
二元=0;
而($i<$count)
{
$char=$string{$i};
if(ereg(“[A-Z]”,$char,$val)){
$ii++;
$s='';
$s.=$char;
}否则{
$s.=$char;
}
$strings[$ii]=$s;
$i++;
}
$name_with_space=内爆(“”,$strings);
mysql_查询('UPDATE Name_Table SET Column_2=“”.$Name_with_space.”其中Column_1='.$row['Column_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 table1 SET column_2 = breakup_name(column_2);

另外,在我使用/作为分隔符的SQLFIDLE中,您必须根据您的分隔符来更改它

上述函数将在大写字母前添加一个空格(从第二个大写字母开始),因此,例如,如果您有
TommyJaeSmith
,它将返回
Tommy Jae Smith


这个函数的逻辑非常简单,它循环遍历并查看每个字母。如果字母为大写字母,则增加一个大写字母,如果大写字母大于或等于2(表示第二个大写字母或之后),则增加一个空格。。。要在字母前面连接。

字段名是什么?firstname和lanstname的第一个字母是否始终大写?@IgorVujovic:是的,它将始终大写。我已在问题中添加了
(在大写字母前面添加一个空格,以第二个大写字母开头)
,因为我认为这是您要做的。这可能经常发生在人们更新表格而忘记空间的时候。。。希望你的问题能得到很多支持票。