gpt4 book ai didi

SQL 2005 在分隔符上拆分逗号分隔列

转载 作者:行者123 更新时间:2023-12-04 13:04:56 24 4
gpt4 key购买 nike

我的谷歌搜索关于如何在分隔符上拆分字符串产生了一些有用的函数,用于在字符串已知时拆分字符串(即见下文):

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Split] (@String varchar(8000), @Delimiter char(1))
returns @temptable TABLE (items varchar(8000))
as
begin
declare @idx int
declare @slice varchar(8000)

select @idx = 1
if len(@String)<1 or @String is null return

while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String

if(len(@slice)>0)
insert into @temptable(Items) values(@slice)

set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end

这适用于已知字符串,例如:
SELECT TOP 10 * FROM dbo.Split('This,Is,My,List',',')

但是,我想将一列传递给一个函数,并将它与我自己行中的其他数据结合在一起......例如给定数据:
CommaColumn   ValueColumn1   ValueColumn2
----------- ------------ -------------
ABC,123 1 2
XYZ, 789 2 3

我想写一些类似的东西:
SELECT Split(CommaColumn,',') As SplitValue, ValueColumn1, ValueColumn2 FROM MyTable

回来
SplitValue    ValueColumn1   ValueColumn2
---------- ------------ ------------
ABC 1 2
123 1 2
XYZ 2 3
789 2 3

这可能吗,或者以前有人做过吗?

最佳答案

是的,可以使用 CROSS APPLY (SQL 2005+):

with testdata (CommaColumn, ValueColumn1, ValueColumn2) as (
select 'ABC,123', 1, 2 union all
select 'XYZ, 789', 2, 3
)
select
b.items as SplitValue
, a.ValueColumn1
, a.ValueColumn2
from testdata a
cross apply dbo.Split(a.CommaColumn,',') b

笔记:
  • 您应该向拆分列的结果集中添加一个索引,以便它返回两列,IndexNumber 和 Value。
  • 带有数字表的内嵌实现通常比这里的程序版本快。

  • 例如:
    create function [dbo].[Split] (@list nvarchar(max), @delimiter nchar(1) = N',')
    returns table
    as
    return (
    select
    Number = row_number() over (order by Number)
    , [Value] = ltrim(rtrim(convert(nvarchar(4000),
    substring(@list, Number
    , charindex(@delimiter, @list+@delimiter, Number)-Number
    )
    )))
    from dbo.Numbers
    where Number <= convert(int, len(@list))
    and substring(@delimiter + @list, Number, 1) = @delimiter
    )

    Erland Sommarskog 在这方面有明确的页面,我认为: http://www.sommarskog.se/arrays-in-sql-2005.html

    关于SQL 2005 在分隔符上拆分逗号分隔列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/951401/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com