Comment puis-je diviser une ligne séparée par des virgules avec 10 valeurs en deux lignes, dans lequel la première ligne contient les 5 premières valeurs et la ligne suivante les 5 dernières valeurs dans SQL ServerFractionner une chaîne séparée en deux lignes dans SQL Server
-2
A
Répondre
0
Ceci est juste un exemple comment vous pouvez le faire fonctionner
CREATE TABLE T
(ColSplit varchar(100)
)
INSERT INTO T VALUES
('a,b,c,d,e,f,g,h,i,j');
SELECT VALUE
FROM STRING_SPLIT((SELECT ColSplit FROM T),',')
se référer ici pour plus d'informations sur STRING_SPLIT
0
vous devriez vraiment revoir la conception de votre base de données.
Le stockage de listes délimitées dans une base de données est une mauvaise conception, comme je l'ai écrit dans mon commentaire.
Cependant, si pour une raison quelconque, vous ne pouvez pas changer la conception de base de données, vous pouvez faire quelque chose comme ceci:
DECLARE @MyString varchar(100) = 'a,bc,def,ghij,klmno,pqrstu,vwxyz12,34567890,1qaz2wsx3,edc4rfv5tg,b6yhn7ujm'
;WITH CTE AS
(
SELECT @MyString As string,
CHARINDEX(',', @MyString) As commaIndex,
1 as commaNumber
UNION ALL
SELECT string,
CHARINDEX(',', string, commaIndex + 1),
commaNumber + 1
FROM CTE
WHERE CHARINDEX(',', string, commaIndex + 1) > 0
)
SELECT SUBSTRING(string, 1, commaIndex-1)
FROM CTE
WHERE commaNumber = 5
UNION ALL
SELECT SUBSTRING(string, commaIndex+1, LEN(string))
FROM CTE
WHERE commaNumber = 5
Le résultat:
a,bc,def,ghij,klmno
pqrstu,vwxyz12,34567890,1qaz2wsx3,edc4rfv5tg,b6yhn7ujm
Avez-vous la recherche pour les fonctions de chaînes séparées dans Sql Server? Au fait, quelle version du serveur sql vous utilisez? –
s'il vous plaît poster quelques exemples de données et le résultat attendu en DDL et aussi montrer ce que vous avez essayé – TheGameiswar
Ce n'est pas difficile à faire. Vous pouvez utiliser n'importe quelle fonction de division de chaîne qui inclut un numéro de ligne (ou en créer une personnalisée, mais les fonctions de séparation de chaînes ne sont pas difficiles à trouver), vous utiliserez une agrégation de cas avec une fonction mod (par exemple 'SELECT Val1 = MAX (cas où RN% 5 = 1 puis Val END), Val2 = MAX (cas où RN% 5 = 2 puis Val END) ... ') et grouper par (RN - 1)/5 – ZLK