加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在SQL Server 2008中按逗号分割功能

发布时间:2020-12-12 16:18:40 所属栏目:MsSql教程 来源:网络整理
导读:我知道这个问题已被多次询问,但找不到我需要的东西. 我有这个列“Order”,其中包含以下格式的数据. ‘XXX,YYY,ZZZZ’ 现在,当我执行select语句时,我需要通过拆分这一列来填充3列 例如. Select Name,Surname,FirstCommaColumn=xx.UpToFirstColumn SecondCommaC
我知道这个问题已被多次询问,但找不到我需要的东西.

我有这个列“Order”,其中包含以下格式的数据. ‘XXX,YYY,ZZZZ’
现在,当我执行select语句时,我需要通过拆分这一列来填充3列

例如.

Select Name,Surname,FirstCommaColumn=xx.UpToFirstColumn
    SecondCommaColumn=xx.FromFirstCommaToLastComma,ThirdColumnFromSecondCommaOnwards=FromSecondCommaToEnd
from myTable
--thought of doing something like
CROSS APPLY (SELECT TOP 1 * FROM dbo.SplitFunctionIDontHave(order,',')) AS xx

有些行没有逗号,所以我必须返回空白.
我不介意我是在函数中还是在查询本身中,只是不确定如何执行此操作.

如何使用SQL Server 2008执行此操作?
如果有所不同,此选择是视图的一部分

解决方法

我已经更改了函数名,因此它不会与Split()函数真正重复.

这是代码:

CREATE FUNCTION dbo.GetColumnValue(
@String varchar(8000),@Delimiter char(1),@Column int = 1
)
returns varchar(8000)
as     
begin

declare @idx int     
declare @slice varchar(8000)     

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

declare @ColCnt int
    set @ColCnt = 1

while (@idx != 0)
begin     
    set @idx = charindex(@Delimiter,@String)     
    if @idx!=0 begin
        if (@ColCnt = @Column) return left(@String,@idx - 1)        

        set @ColCnt = @ColCnt + 1

    end

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

以下是用法:

select dbo.GetColumnValue('Col1,Field2,VAlue3',3)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读