आपको जो चाहिए वह एक विभाजित उपयोगकर्ता-परिभाषित फ़ंक्शन है। इसी के साथ, समाधान लग रहा है
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
यहां नमूने के विभाजन समारोह है जैसे:
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
)
क्या आप SQL सर्वर के भीतर ऐसा करना चाहते हैं? एक 'चयन' कथन में? 'INSERT' या 'UPDATE' कथन में? अधिक जानकारी हमें आपके प्रश्न – BinaryTox1n
का उत्तर देने में मदद करेगी जो कि नाम भंडारण के लिए भयानक डिज़ाइन है, आपको पहले, आखिरी, मध्य नाम को अलग-अलग कॉलम के रूप में रखने पर विचार करना चाहिए, मुझे आशा है कि आप इस तालिका से कोई भी रिपोर्ट नहीं करेंगे जो नामों को विभाजित करता है जैसा आपने अनुरोध किया था –
एक चयन कथन में इसकी आवश्यकता है। असल में यह संग्रहित प्रक्रिया के लिए है जो तालिका से मूल्यों का चयन करके डेटा डालने वाला है। इसलिए मुझे इसे चुनिंदा कथन में मिलता है जो बहुत अच्छा होगा ... – Shahsra