将地址值分割成单独的列

3
我正在使用 SQL Server 2012,我有一个具有以下结构的表。
DebCode,DebName,DebBillAdd1,DebBillAdd2,DebBillAdd3

但是我的DebBillAdd1列包含了债务人的完整地址,如下所示。(所有记录中DebBillAdd2DebBillAdd3都为空)
No170, Madapatha Road, Pillyandala, Sri Lanka
91/1, Canal Road, Hethdala, Wattala.

现在我需要将地址分成三个部分,并将它们更新到剩余的DebBillAdd2和DebBillAdd3列中。
这就是我需要将地址拆分的方式。
DebBillAdd1 - No170, Madapatha Road
DebBillAdd2 - Piliyandala
DebBillAdd3 - Sri Lanka

DebBillAdd1 - 91/1, Canel Road
DebBillAdd2 - Hethdala
DebBillAdd3 - Wattala
  • DebBillAdd1 - SUBSTRING()函数必须检索第一个字符和前两个逗号之间的字符串。
  • DebBillAdd2 - SUBSTRING()函数必须检索下两个逗号之间的字符串。
  • DebBillAdd3 - SUBSTRING()函数必须检索剩余的字符串。

我正在使用Visual Foxpro进行开发。

由于我不知道如何分割字符串,因此无法理解。您能否解释一下如何做到这一点?

4个回答

2
您可以使用Foxpro中的ATC()和SUBSTR()函数来解析字符串。
例如,要获取address1:
 lcAddress1 = SUBSTR(DebBillAdd1, 1, ATC(DebBillAdd1, [,], 2)-1)

获取地址2:
 lnEndPos = ATC(DebBillAdd1, [,], 3)   &&Position of third comma
 lnStartPos = ATC(DebBillAdd1, [,], 2) + 1    &&Position of second comma plus 1, could add two to remove space
 lnLength = lnEndPos - lnStartPos       &&Number of characters to get.
 SUBSTR(DebBillAdd1, lnStartPos, lnLength)    &&SUBSTR function with starting position and number of characters to get.

您可以使用ATC()和SUBSTR()函数来解析字符串中的address3信息。
然后,使用VFP UPDATE或REPLACE命令来更新表格的列。

1

如果你的逗号总是在同一个位置且没有出现在其他任何地方,VFP的GETWORDNUM()函数可以轻松解决此问题:

REPLACE ALL DebBillAdd3 WITH GetWordNum(DebBillAdd1, 4, ","), ;
        DebBillAdd2 WITH GetWordNum(DebBillAdd1, 3, ","), ;
        DebBillAdd1 WITH GetWordNum(DebBillAdd1, 1, ",") + "," + GetWordNum(DebBillAdd1, 2, ",")

Tamar


0
如果部分总是以相同的方式分隔(即第一个字符到第二个逗号,第二个到第三个逗号,第三个逗号到结尾),请查看此T-SQL代码:
DECLARE @fullAddress varchar(50),
        @FirstPart varchar(50),
        @SecondPart varchar(50),
        @ThirdPart varchar(50)

SET @fullAddress = 'No170, Madapatha Road, Pillyandala, Sri Lanka' 

DECLARE @SecondCommaLocation int,
        @ThirdCommaLocation int

SELECT  @SecondCommaLocation = CharIndex(',', @FullAddress , CharIndex(',', @FullAddress , 1)+1), -- Get the index of the second comma
        @ThirdCommaLocation = CharIndex(',', @FullAddress , @SecondCommaLocation+1) -- get the index of the third comma

SELECT @FirstPart = SUBSTRING(@FullAddress,1,@SecondCommaLocation-1), -- get the part between the 1st characted and the 2nd comma
       @SecondPart = SUBSTRING(@FullAddress,@SecondCommaLocation+1,@ThirdCommaLocation-@SecondCommaLocation-1), -- get the part between the 2nd and 3rd comma
       @ThirdPart = SUBSTRING(@FullAddress, @ThirdCommaLocation+1, LEN(@FullAddress)-@ThirdCommaLocation+1) -- get tha part after the 3rd comma

SELECT @FirstPart,
       @SecondPart,
       @ThirdPart

0
SELECT DebCode = 1, DebBillAdd1 = 'No170, Madapatha Road, Pillyandala, Sri Lanka', DebBillAdd2 = null, DebBillAdd3 = null INTO test

DECLARE @c1 int, @c2 int, @c3 int, @len int

UPDATE test 
SET
@c1 = CHARINDEX(',', DebBillAdd1, 0)
,@c2 = CHARINDEX(',', DebBillAdd1, @c1 + 1)
,@c3    = (CHARINDEX(',', DebBillAdd1, @c1 + @c2 + 1) - 1)
,@len = LEN(DebBillAdd1)

,DebBillAdd1 = SUBSTRING(DebBillAdd1, 0, @c2)
,DebBillAdd2 = SUBSTRING(DebBillAdd1, @c2 + 1, @c3 - @c2)
,DebBillAdd3 = RIGHT(DebBillAdd1, @len - @c3 - 1)

FROM        test

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接