Ce dont vous avez besoin est une fonction définie par l'utilisateur. Avec cela, la solution ressemble
With SplitValues As
(
Select T.Name, Z.Position, Z.Value
, Row_Number() Over (Partition By T.Name Order By Z.Position) As Num
From Table As T
Cross Apply dbo.udf_Split(T.Name, ' ') As Z
)
Select Name
, FirstName.Value
, Case When ThirdName Is Null Then SecondName Else ThirdName End As LastName
From SplitValues As FirstName
Left Join SplitValues As SecondName
On S2.Name = S1.Name
And S2.Num = 2
Left Join SplitValues As ThirdName
On S2.Name = S1.Name
And S2.Num = 3
Where FirstName.Num = 1
est ici une fonction split exemple:
Create Function [dbo].[udf_Split]
(
@DelimitedList nvarchar(max)
, @Delimiter nvarchar(2) = ','
)
RETURNS TABLE
AS
RETURN
(
With CorrectedList As
(
Select Case When Left(@DelimitedList, Len(@Delimiter)) <> @Delimiter Then @Delimiter Else '' End
+ @DelimitedList
+ Case When Right(@DelimitedList, Len(@Delimiter)) <> @Delimiter Then @Delimiter Else '' End
As List
, Len(@Delimiter) As DelimiterLen
)
, Numbers As
(
Select TOP(Coalesce(DataLength(@DelimitedList)/2,0)) Row_Number() Over (Order By c1.object_id) As Value
From sys.columns As c1
Cross Join sys.columns As c2
)
Select CharIndex(@Delimiter, CL.list, N.Value) + CL.DelimiterLen As Position
, Substring (
CL.List
, CharIndex(@Delimiter, CL.list, N.Value) + CL.DelimiterLen
, CharIndex(@Delimiter, CL.list, N.Value + 1)
- (CharIndex(@Delimiter, CL.list, N.Value) + CL.DelimiterLen)
) As Value
From CorrectedList As CL
Cross Join Numbers As N
Where N.Value <= DataLength(CL.List)/2
And Substring(CL.List, N.Value, CL.DelimiterLen) = @Delimiter
)
Est-ce quelque chose que vous voulez faire dans SQL Server? Dans une instruction SELECT? Dans une instruction 'INSERT' ou' UPDATE'? Plus de détails nous aiderait à répondre à votre question – BinaryTox1n
qui est terrible conception pour le stockage de nom, vous devriez envisager d'avoir premier, dernier, deuxième prénom en colonnes séparées, J'espère que vous ne faites aucun rapport sur cette table qui divise les noms que vous avez demandé –
Besoin de cela dans une déclaration choisie. En fait, c'est pour la procédure stockée qui insère les données en sélectionnant les valeurs d'une table.Alors je l'obtiens dans l'instruction select qui sera géniale ... – Shahsra