2017-03-16 40 views
0

我是一名SQL助手,大部分時間都花在Powershell上。所以爲了這個目的,我會這樣表達自己。基本上,我有一列FullName,其中包含FirstName LastName,我希望它在SELECT查詢中重組爲LastName, Firstname如何在SQL中執行拆分和建立字符串?

如果我不夠清晰,在PowerShell中我會做到這一點:

$string = "John Smith" 
$split = $string.Split(' ') 
$builder = "$($split[0]), $($split[1])" 

一個人如何在SQL做到這一點?

+0

哪個sql server版本? – McNets

+1

如果某人的全名是「John Paul Van Der Veere」,該怎麼辦?它是否可以在錯誤的空間分裂,因爲這將會發生在你的Powershell腳本中? –

+0

是的,我正在處理的專欄僅包含First Last而沒有其他名稱。 – user3066571

回答

1

隨着數據是很好的,一貫的,你可以使用的CHARINDEXSUBSTRING功能的組合:

SELECT 
    SUBSTRING(FullName, 0, CHARINDEX(' ', FullName)) AS FirstName, 
    SUBSTRING(FullName, CHARINDEX(' ', FullName)+1, LEN(FullName)) AS LastName 
FROM NamesTable 

現在,如果你想加入他們回來在一起,只是使用一些字符串concatenation:

SELECT 
    SUBSTRING(FullName, CHARINDEX(' ', FullName)+1, LEN(FullName)) 
    + ', ' + 
    SUBSTRING(FullName, 0, CHARINDEX(' ', FullName)) 
FROM NamesTable 
+0

會不會把它們分成兩列?我怎麼把它們合併成一個,用逗號和空格隔開? – user3066571

+1

是的,但我認爲這將是相當明顯的如何再次將它們連接在一起 - 我已經添加了代碼。 – DavidG

0

SQL服務器2016年 https://msdn.microsoft.com/en-us/library/mt684588.aspx

DECLARE @tags NVARCHAR(400) = 'clothing,road,,touring,bike' 

SELECT value 
FROM STRING_SPLIT(@tags, ',') 
WHERE RTRIM(value) <> ''; 
+0

在您的DECLARE語句中,有沒有辦法讓我查詢的列的內容?而不是做一個靜態分配? – user3066571

+0

是的。 SELECT value FROM STRING_SPLIT((從dbo.Users中選擇用戶名),'@') WHERE RTRIM(value)<>''; –