用条件分隔列

Separate Columns with conditions

我有一个 table 有一些问题数据。例如,table 如下:

ID   NAME                            JOB
---  ---------------------------     ---------------
1    Peter                           Teacher
2    John                            Programmer
3    Tom**He is a Teacher  
4    Alan**He is a Accountant

问题是一些数据已正确插入,但有些没有。现在我想执行 SQL 以使 table 如下所示:

ID   NAME                            JOB
---  ---------------------------     ---------------
1    Peter                           Teacher
2    John                            Programmer
3    Tom                             Teacher  
4    Alan                            Accountant

我不熟悉 SQL 语句,所以我只能想到使用以下 PHP 脚本来解决这个问题。

$sql1 = "SELECT NAME FROM MY_TABLE WHERE JOB = '' AND NAME LIKE '%He is a %'";
$res1 = mysql_query($sql1);
while($row1 = mysql_fetch_array($res1)){
    $new_data = explode("**He is a ", $row1["NAME"]);
    $sql2 = "UPDATE MY_TABLE SET NAME = '".$data[0]."', JOB = '".$data[1]."' WHERE ID = '".$data["ID"]."'";
    mysql_query($sql2);
}

任何人都可以建议一个更好的方法来让我用一个或几个 SQL 语句来解决这个问题吗?谢谢

UPDATE 
SET    NAME     = SUBSTRING_INDEX(SUBSTRING_INDEX(NAME, '**He is a ', 1), ' ', -1),
       job      = SUBSTRING_INDEX(SUBSTRING_INDEX(NAME, '**He is a ', 2), ' ', -1)
WHERE  NAME LIKE '%**He is a %'

您可以使用 substring_index 函数分解字符串,并在单个 update 语句中应用所有更改:

UPDATE my_table
SET    JOB = SUBSTRING_INDEX (name, '**He is a ', -1),
       name = SUBSTRING_INDEX (name, '**He is a ', 1),
WHERE  name LIKE '%**He is a %' AND
       (job IS NULL OR job = '') -- Just to be on the safe side