首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Server中将字符串按字符拆分为单独的列

如何在Server中将字符串按字符拆分为单独的列
EN

Stack Overflow用户
提问于 2014-02-24 15:29:29
回答 5查看 57.2K关注 0票数 8

我在Server中有一个字段,包含节、乡和范围信息,每个字段用破折号分隔;例如:18-84-7。我想把这些信息按每一个单位、每个部门作为一个领域、乡镇作为一个领域和范围作为一个领域进行细分,比如:18 84 7

字符数各不相同。它不总是两个字符或每个单位一个字符,所以我相信最好的方法是分开的破折号,但我不知道如何做到这一点。是否有一种方法可以在Server中完成?

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-02-24 15:57:22

可能有几种不同的方法,有些比另一些更丑。这里有一个:

(注: dat =字符串)

代码语言:javascript
复制
select *,
  substring(dat,1,charindex('-',dat)-1) as Section,
  substring(dat,charindex('-',dat)+1,charindex('-',dat)-1) as TownShip,
  reverse(substring(reverse(dat),0,charindex('-',reverse(dat)))) as myRange
from myTable
票数 8
EN

Stack Overflow用户

发布于 2017-04-22 09:16:59

请尝试更可靠的代码

创建以下功能

代码语言:javascript
复制
CREATE FUNCTION dbo.UFN_SEPARATES_COLUMNS(
 @TEXT      varchar(8000)
,@COLUMN    tinyint
,@SEPARATOR char(1)
)RETURNS varchar(8000)
AS
  BEGIN
       DECLARE @POS_START  int = 1
       DECLARE @POS_END    int = CHARINDEX(@SEPARATOR, @TEXT, @POS_START)

       WHILE (@COLUMN >1 AND @POS_END> 0)
         BEGIN
             SET @POS_START = @POS_END + 1
             SET @POS_END = CHARINDEX(@SEPARATOR, @TEXT, @POS_START)
             SET @COLUMN = @COLUMN - 1
         END 

       IF @COLUMN > 1  SET @POS_START = LEN(@TEXT) + 1
       IF @POS_END = 0 SET @POS_END = LEN(@TEXT) + 1 

       RETURN SUBSTRING (@TEXT, @POS_START, @POS_END - @POS_START)
  END
GO

然后尝试下面的代码

代码语言:javascript
复制
DECLARE @STRING VARCHAR(20) ='1-668-333'
SELECT
  dbo.UFN_SEPARATES_COLUMNS(@STRING, 1, '-') AS VALUE1,
  dbo.UFN_SEPARATES_COLUMNS(@STRING, 2, '-') AS VALUE2,
  dbo.UFN_SEPARATES_COLUMNS(@STRING, 3, '-') AS VALUE3

结果

如果你需要更多的理解,请去

https://social.technet.microsoft.com/wiki/contents/articles/26937.t-sql-splitting-a-string-into-multiple-columns.aspx

票数 3
EN

Stack Overflow用户

发布于 2014-02-24 15:52:58

您可以使用类似的东西(由@canon发布)

代码语言:javascript
复制
CREATE FUNCTION [dbo].[Split]
(   
 @String varchar(max)
,@Delimiter char
)
RETURNS @Results table
(
 Ordinal int
,StringValue varchar(max)
)
as
begin

    set @String = isnull(@String,'')
    set @Delimiter = isnull(@Delimiter,'')

    declare
     @TempString varchar(max) = @String
    ,@Ordinal int = 0
    ,@CharIndex int = 0

    set @CharIndex = charindex(@Delimiter, @TempString)
    while @CharIndex != 0 begin     
        set @Ordinal += 1       
        insert @Results values
        (
         @Ordinal
        ,substring(@TempString, 0, @CharIndex)
        )       
        set @TempString = substring(@TempString, @CharIndex + 1, len(@TempString) - @CharIndex)     
        set @CharIndex = charindex(@Delimiter, @TempString)
    end

    if @TempString != '' begin
        set @Ordinal += 1 
        insert @Results values
        (
         @Ordinal
        ,@TempString
        )
    end

    return
end

想了解更多信息,请看一下How to split string using delimiter char using T-SQL?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21991953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档