我有一个字符串/文本元素,我需要拆分并插入表格。
我有
的文字值123456|House,123567|Flat,789463|Car,635491|Lorry,
数值(nvalue)需要进入第一列,类型如何。众议院需要排在第二位。
“,”之前的值需要在同一行。我会找一张类似
的桌子╔══════════╦═══════════╗
║ nvalue ║ Type ║
╠══════════╬═══════════╣
║ 123456 ║ House ║
║ 123567 ║ Flat ║
║ 789463 ║ Car ║
║ 635491 ║ Lorry ║
╚══════════╩═══════════╝
我正在尝试使用SQL代码
INSERT INTO TABLE resultsTable
SELECT
nvalue({status}, ';')[255],
type({status}| ';')[255],
但我没有运气。
{status}
是字符串所在的文本字段。
答案 0 :(得分:1)
在SQL Server 2016+中,您可以使用string_split()
。
在2016年之前的SQL Server中,使用由Jeff Moden和left()
以及stuff()
(或right()
)与charindex()
的CSV Splitter表值函数:
declare @status nvarchar(max) = '123456|House,123567|Flat,789463|Car,635491|Lorry,'
select
nvalue = left(s.Item,charindex('|',s.Item)-1)
, [Type] = stuff(s.Item,1,charindex('|',s.Item),'')
from dbo.DelimitedSplitN4K(@status,',') s
where s.Item <>''
rextester演示:http://rextester.com/QQZUC78477
返回:
+--------+-------+
| nvalue | Type |
+--------+-------+
| 123456 | House |
| 123567 | Flat |
| 789463 | Car |
| 635491 | Lorry |
+--------+-------+
拆分字符串参考:
string_split()
in SQL Server 2016 : Follow-Up #1 - Aaron Bertrand string_split()**
- Solomon Rutzky 答案 1 :(得分:0)
您可以从网络或SQL Server 2016中使用split()
。然后:
with lines(line) as (
select l.*
from dbo.split(@str, '|') l
)
insert into resultsTable (nvalue, type)
select left(line, charindex(',', line) - 1),
stuff(line, charindex(',', line), len(line), '')
from lines;
答案 2 :(得分:0)
使用SUBSTRING(),Xml和Cross应用我们可以获得所需的结果
DECLARE @Value NVARCHAR(max) = ',123456|House,123567|Flat,789463|Car,635491|Lorry,'
DECLARE @DYVALUE TABLE (VALUE NVARCHAR(MAX))
INSERT INTO @DYVALUE (VALUE)
SELECT @VALUE
;WITH cte
AS (
SELECT Split.a.value('.', 'VARCHAR(1000)') AS Value
FROM (
SELECT CAST('<S>' + REPLACE(Value, ',', '</S><S>') + '</S>' AS XML) AS Value
FROM @DyValue
) AS A
CROSS APPLY Value.nodes('/S') AS Split(a)
)
SELECT *
FROM (
SELECT SUBSTRING(Value, 0, CHARINDEX('|', Value)) AS nvalue
,SUBSTRING(Value, CHARINDEX('|', Value) + 1, LEN(Value)) AS [Type]
FROM Cte
) DT
WHERE nvalue <> ''
AND [Type] <> ''
结果:
+--------+-------+
| nvalue | Type |
+--------+-------+
| 123456 | House |
| 123567 | Flat |
| 789463 | Car |
| 635491 | Lorry |
+--------+-------+