2017-10-17 5 views
1

J'ai une colonne en sql qui doit être divisé et mettre à jour 2 autre colonne avec la chaîne.Split SQL et mise à jour

column a : 
1000 aa testing it 
1000 bb tested 
1000 cc done 
1000 dd complete 

i une colonne nommée poste où les chiffres avec 2 lettres doivent venir et j'ai une colonne état du nom où le reste doit venir

Ce doit être les résultats finaux:

column post: 
1000 aa 
1000 bb 
1000 cc 
1000 dd 
état de la colonne

doit être

testing it 
tested 
done 
complete 
+0

studio managemnet serveur Microsoft SQL –

+0

Est-ce que toutes les valeurs dans une colonne suit même modèle? c'est-à-dire 1000 aa, 1000 bb etc –

+0

Essayez la solution générique ci-dessous. J'ai séparé la chaîne basée sur le deuxième espace. J'espère que ça aide –

Répondre

2
update table_name 
set post SUBSTRING(a, 1, 7) 

update table_name 
set status SUBSTRING(a, 9, 100) 

(que 100 est juste pour être sûr que vous prenez tous)

+0

Merci, C'était le moyen le plus facile de le faire;) –

2

Utilisez la fenêtre Substring Fonction:

Résultat:

column a   column post column status 
1000 aa testing it 1000 aa  testing it 
1000 bb tested  1000 bb  tested 
1000 cc done  1000 cc  done  
1000 dd complete 1000 dd  complete 

Click here pour démonstration

+1

Et s'il a des données comme '100000 dd complete' ?? –

+0

Chaque ligne en question suit le même modèle. Par conséquent, j'ai suivi le modèle dans ma requête aussi. –

+0

Non. Vous pourriez être ici, mais essayez toujours de le clarifier avec OP (comme vous avez demandé) ou fournir une solution générique qui prendra soin de tous les scénarios :) –

3

Il y a une logique à Éclate une chaîne en deuxième espace.

declare @name varchar(100) 
set @name = '1000 aa testing it' 

SELECT @name as original_string, 
substring(@name, 1,charindex(' ', @name, CHARINDEX(' ',@name) + 1)) as post , 
substring(@name, charindex(' ', @name, CHARINDEX(' ',@name) + 1),len(@name)-charindex(' ', @name, CHARINDEX(' ',@name) + 1)+1) as status 

sortie:

original_string  post  status 
------------------- -------- ------------ 
1000 aa testing it 1000 aa testing it 

sql demo

1

Cela devrait aider, la logique de trouver l'apparition de 1ère et 2ème espace et utiliser divisé la chaîne. Demo

create table t(str varchar(100)); 

insert into t(str) values('1000 aa testing it'); 
insert into t(str) values('1000 bb tested'); 
insert into t(str) values('1000 cc done'); 
insert into t(str) values('1000 dd complete') 
insert into t(str) values('10000 dd complete'); --Test Case found in comment 


select substring(str, 1, P2.Pos - 1) as [column post] 
     ,substring(str, P2.Pos +1, len(str)) as [column status] 
from t 
cross apply (select (charindex(' ', str))) as P1(Pos) 
cross apply (select (charindex(' ', str, P1.Pos+1))) as P2(Pos);