2016-08-17 10 views
1

私はちょっと時間がかかっています。私は2列のテーブルを持っています。姓と名。1つの列を2つに分割する更新?

SQLにインポートされたデータには、firstName列の中に姓と名があります。

最初のスペースの前にすべてをlastNameに、スペースの後のすべてをfirstNameカラムに入れるための簡単な方法はありますか?私は輸出することができ、エクセルでこれを行うことができますが、生産時間に近いので、リスクの問題はありません。

私はここでいくつかの異なる分割記事を見てきましたが、それらは同時に更新する必要はありません。

+0

分割のアンカーとして最初のスペースを使用するだけで正確ですか? Mary Ann Smithのような名前はどうですか? – Nicarus

+0

更新のセット割り当ての右側にmysql文字列関数を使用できます。セットアサインメントは左から右へ処理されるので、「終わり」をファーストネームから削除する前にラストネームに割り当ててください。 – Uueerdo

+1

名前を分割しても、不正確になることに注意してください。 「ジョン・スミス」はスペースで分割しやすいですが、「Mary Ann Summers」や「Edward Van Halen」はどうですか?最初は2番目のスペースで分割し、2番目のスペースは最初のスペースで分割します。あるいは、「Mary Ann Van Halen」はどうですか?私は進んではいけないと言っているのではなく、名前を分割することは不正確な科学であることに注意してください。 –

答えて

2

使用しよう:

UPDATE 
    table 
SET 
    lastname = SUBSTRING(firstName, 1, CHARINDEX(' ', firstName) - 1), 
    firstName= SUBSTRING(firstName, CHARINDEX(' ', firstName) + 1, LEN(firstName)) 
+0

それはトリックを行うように見えますが、私のMySQLはChARINDEXは機能ではないと言います。これはMySQLかMSSQLのためですか? –

+0

[MSSQL](https://msdn.microsoft.com/en-us/library/ms186323.aspx)を使用する場合は、MySQLの[INSTR](https://dev.mysql.com/doc /refman/5.5/en/string-functions.html#function_instr)、それに応じて調整します(つまり、パラメータを入れ替えます)。 – Uueerdo

+0

ニカラウス、 '' ''の代わりに '' _ ''の理由は何ですか?また、あなたはlastnameフィールドにファーストネームを入れていて、ファーストネームのファーストネームにファーストネームを入れようとしているようです(そして 'LEN()'コールは不要で、ビットは "iffy"です)。 – Uueerdo

1

MySQLの

デモンストレーション:

SET @str := 'Robert Optional Dickey'; 

SELECT 
SUBSTRING_INDEX(@str,SUBSTRING_INDEX(@str,' ',-1),1) AS lastName, 
SUBSTRING_INDEX(@str,' ',-1) AS firstName; 

出力:

lastName   firstName 
Robert Optional  Dickey 

更新クエリ:

UPDATE your_table 
SET lastName = SUBSTRING_INDEX(@str,SUBSTRING_INDEX(@str,' ',-1),1), 
firstName = SUBSTRING_INDEX(@str,' ',-1); 

注:それはちょうど最初の名前と最後の空白の後に文字列を考慮し、フルname.It内の任意の数のスペースのために動作します。

関連する問題