在两列中转换地址

Convert address in two columns

我在 iad_Line1 = 415 W 10th St S 列中有一个地址,我想将 415 拆分到 ad_housenumber 列,将 'W 10th St S' 拆分到 iad_street 列。

这在 SQL 中是否可以作为多行的批量更新?

这是您要找的东西吗??

DECLARE @ADDRESS AS NVARCHAR(50)

SET @ADDRESS = '415 W 10th St S'

SELECT SUBSTRING(@ADDRESS, 1,1) + '-'+ SUBSTRING(@ADDRESS, 2,2) AS ADD1, 
       RTRIM(SUBSTRING(@ADDRESS, 4,LEN(@ADDRESS) - 3)) AS ADD2

检查这个

DECLARE @ADDRESS AS NVARCHAR(50)

SET @ADDRESS = '415 W 10th St S'

SELECT 
    SUBSTRING(@ADDRESS, 0, charindex(' ',@address) ) as ad_housenumber ,
    RTRIM(SUBSTRING(@ADDRESS, charindex(' ',@address)+1,LEN(@ADDRESS) - 3)) AS iad_street

更新了带有更新语句的答案:

declare @source table(iad_Line1 varchar(50), ad_housenumber varchar(50), iad_street varchar(50))

insert into @source values('415 W 10th St S',null,null)

update @source
set ad_housenumber = SUBSTRING(iad_Line1, 0, charindex(' ',iad_Line1) ) 
,iad_street = RTRIM(SUBSTRING(iad_Line1, charindex(' ',iad_Line1)+1,LEN(iad_Line1) - 3))
from
@source

select * from @source

这样试试,

DECLARE @t TABLE
  (
     AlphaColumn VARCHAR(30),
     DOORNO      INT,
     ADDRESS1    VARCHAR(30)
  )

INSERT INTO @t
            (AlphaColumn)
VALUES      ('415 W 10th St S'),
            ('34 St S'),
            ('415 h St SAVC'),
            ('123 d'),
            ('ww 1')

SELECT *
FROM   @t

UPDATE Y
SET    DOORNO = ( CASE
                    WHEN AlphaStart > 0 THEN LEFT(AlphaColumn, AlphaStart - 1)
                    ELSE AlphaColumn
                  END ),
       ADDRESS1 = ( CASE
                      WHEN noStart > 0 THEN RIGHT(AlphaColumn, LEN(AlphaColumn) + 1 - AlphaStart)
                      ELSE AlphaColumn
                    END )
FROM   (SELECT patindex('%[a-z]%', AlphaColumn) AS [AlphaStart],
               patindex('%[0-9]%', AlphaColumn) AS [noStart],
               AlphaColumn,
               DOORNO,
               ADDRESS1
        FROM   @t)y
WHERE  [AlphaStart] <> 1

SELECT *
FROM   @t