2016-07-19 15 views
2

Angenommen, meine Tabelle wie dieseSQL-Befehl, um Daten von einer Spalte zu einem anderen

[ name, number, firstname]  
[foo:bar, 123,   ] 
[bar:foo, 456,   ] 

Ich möchte sieht das Namensfeld auf aufzuspalten ‚:‘ und verwenden Sie den ersten Teil als ‚Vorname‘ Spalte. Außerdem möchte ich, dass dies dauerhaft ist und nicht nur eine Ergebnismenge. Wie würde ich das tun?

Ich bin mit SQL Server 2008.

Ich bin mir bewusst, dass Varianten dieser Frage vor gefragt worden, aber sie scheinen alle mit lediglich der Auswahl der Daten umgehen, und ich meine, es zu aktualisieren.

Antwort

2

Sie könnten eine Ansicht erstellen, die dies dann für zukünftige Selektionen verwendet.

CREATE VIEW split name AS 
SELECT 
SUBSTRING(name, 1, CHARINDEX(':', name, 1) - 1) as firstname, 
RTRIM(SUBSTRING(name, CHARINDEX(':', name, 1)+1,100)) as surname, number 
FROM myTable 

Alternativ

UPDATE myTable 
SET firstname = SUBSTRING(name, 1, CHARINDEX(':', name, 1) - 1) 
FROM myTable 
+0

In Ihrer zweiten Lösung ist 'Name' der Tabellenname oder der Spaltenname? –

+0

Warum ist 'name' der Anweisungsblock für UPDATE, wenn der Name unverändert ist? –

+0

Ich gebe dem plötzlich langsamen WiFi die Schuld – Mike

1
select substring(name, 1, Charindex(':', name) - 1) as first_name, 
    substring(name, Charindex(':', name) + 1, LEN(name)) as last_name, 
    number 
from my_table 
+0

Können Sie erklären, was dort eigentlich vor sich geht? –

1

Sie dies tun können, eine berechnete Spalte für firstname, indem - das bedeutet, dass Sie nicht brauchen, tatsächlich Vornamens bestehen bleiben, aber man kann es behandeln, als wäre es jede andere Spalte.

CREATE TABLE [dbo].[MyTable](
    [name] [nvarchar](255) NOT NULL, 
    [firstname] AS (substring([name],(0),charindex(':',[name]))) 
) 
Verwandte Themen