我有以下查询,其中有一个表,该表使用分隔符存储信息
SQL 版本 - Microsoft SQL Azure (RTM) - 12.0.2000.8
DECLARE @commanTable TABLE
(
CommaId NVARCHAR(MAX),
Name NVARCHAR(500)
)
DECLARE @commanTable1 TABLE
(
CommaId INT,
Name NVARCHAR(500)
)
INSERT INTO @commanTable VALUES ('2324205.3933251.7336404', 'Test1'),
('2324206.3933252.7336405', 'Test2')
INSERT INTO @commanTable1 (CommaId, Name)
SELECT value, Name
FROM @commanTable CROSS APPLY STRING_SPLIT(CommaId,'.');
SELECT * FROM @commanTable1
得到以下结果
我需要结果的地方
答案 0 :(得分:5)
如果您只对第一个值感兴趣,则不需要使用 STRING_SPLIT()
。您可以简单地使用 charindex()
找到第一个分隔符并使用 left()
提取它
SELECT *, left(CommaId, charindex('.', CommaId) - 1)
FROM @commanTable
编辑:如果您一直想要第 n 个值,您可以执行级联 charindex()。前提是n不是太大。否则使用我在评论中提供的功能。
SELECT *,
item1 = left(CommaId, p1.p - 1),
item2 = substring(CommaId, p1.p + 1, p2.p - p1.p - 1)
FROM @commanTable t
cross apply
(
select p = charindex('.', CommaId)
) p1
cross apply
(
select p = charindex('.', CommaId, p1.p + 1)
) p2