如何将SQL String_split函数中的数据返回到我的表中

时间:2016-06-28 17:47:36

标签: sql-server

使用最新的SQL更新和字符串拆分功能如何将拆分数据插回到我的表中?

select be.*, SS.value
from b2bemployee be
outer apply string_split(firstname, ' ') AS SS
where id=2319

使用它我将我的FirstName列拆分为两个值,并在两个单独的行上返回数据。我正在尝试将此数据作为updatedfirstname(在空格之前)和updatedlastname(在空格之后)插回到我的表格中

3 个答案:

答案 0 :(得分:3)

分割功能可能很慢,尤其是对于较大的表格。

考虑ParseName(),例如

Declare @String varchar(25) = 'John Smith 999-11-1234'
Select FirstName=PARSENAME(Replace(@String,' ','.'),3)
      ,LastName =PARSENAME(Replace(@String,' ','.'),2)
      ,SSN      =PARSENAME(Replace(@String,' ','.'),1)

--Returns--
FirstName   LastName    SSN
John        Smith       999-11-1234

所以,在你的情况下,并假设你的分隔符是一个空格而你的字段看起来像“Jame Smith”

Select FirstName=PARSENAME(Replace(YourFieldName,' ','.'),2)
      ,LastName =PARSENAME(Replace(YourFieldName,' ','.'),1)

答案 1 :(得分:2)

我认为这会有效:

Create Table #Test (Value Varchar(8000), LeftPart Varchar(8000), RightPart Varchar(8000))
Insert #Test Values ('Joe Cool', '', '')
Insert #Test Values ('John Doe', '', '')


Update #Test Set LeftPart = Substring(Value, 1, Charindex(' ', Value) - 1), RightPart = Substring(Value, Charindex(' ', Value) + 1, 8000) From #Test
Select * From #Test

另请注意,除非您计划在拆分后删除整个字段,否则这对于计算列来说是个好例子。

答案 2 :(得分:0)

如果您想使用STRING_SPLITPARSENAMESUBSTRING的方式更适合这种情况),您需要执行以下操作:

;WITH cte AS (
SELECT  be.*,
        SS.value as FN, 
        ROW_NUMBER() OVER (PARTITION BY be.id ORDER BY (SELECT 1)) as RN
FROM b2bemployee be 
OUTER APPLY STRING_SPLIT(be.firstname, ' ') as SS
WHERE be.id=2319
)

SELECT  c1.*,
        c2.FN
FROM cte c1
LEFT JOIN cte c2
    ON c1.RN+1 = c2.RN
WHERE c1.RN = 1

我建议使用LEFTRIGHT

SELECT  be.*,
        RIGHT(be.firstname,CHARINDEX(' ',be.firstname)) as updatedfirstname ,
        LEFT(be.firstname,LEN(be.firstname) - CHARINDEX(' ',be.firstname)-1) as updatedlastname 
FROM b2bemployee be 
WHERE be.id=2319