我查看了这个网站,找不到正确的答案。
我有一个名为ADDRLINE1的字段,用于保存联系地址。地址就像这样输入到应用程序中。
7710 Computer Ave.
Ste. 103
Edina, MN 55435
每行后都有一个回车符。有时会有一个#套件,有时候没有。
我需要将此地址分成不同的列。
Addr1 Addr2 Addr3 City State ZipCode
7710 Computer Ave. Ste. 103 NULL Edina MN 55435
我该怎么做?我已经看过几个例子,但没有一个是我正在寻找的。 p>
提前致谢!
答案 0 :(得分:0)
这不是最干净,最有效的方式,而且我确信最有可能做得更好更好的方法,但这应该让你顺利,直到有人用更好的方式回答溶液:
DECLARE @tbl TABLE ( ADDRLINE1 VARCHAR(100) )
INSERT INTO @tbl
SELECT '7710 Computer Ave' + CHAR(13) + CHAR(10) + 'Ste. 103' + CHAR(13) + CHAR(10) + 'suite #123' + CHAR(13) + CHAR(10) + 'Edina, MN 55435'
UNION ALL
SELECT '7710 Computer Ave' + CHAR(13) + CHAR(10) + 'Ste. 103' + CHAR(13) + CHAR(10) + 'Edina, MN 55435'
SELECT SUBSTRING([ADDRLINE1], 1, CHARINDEX(CHAR(13), [ADDRLINE1]) - 1) AS Addr1 ,
SUBSTRING([ADDRLINE1], CHARINDEX(CHAR(13), [ADDRLINE1]) + 2, CHARINDEX(CHAR(13), REPLACE([ADDRLINE1], SUBSTRING([ADDRLINE1], 1, CHARINDEX(CHAR(13), [ADDRLINE1]) + 1), '')) - 1) AS Addr2 ,
CASE WHEN (LEN([ADDRLINE1]) - LEN(REPLACE([ADDRLINE1],CHAR(13),''))) = 3
THEN REVERSE(SUBSTRING(REVERSE(REPLACE([ADDRLINE1],REVERSE(SUBSTRING(REVERSE([ADDRLINE1]),1,CHARINDEX(CHAR(13),REVERSE([ADDRLINE1])))),'')),
1,
CHARINDEX(CHAR(13),REVERSE(REPLACE([ADDRLINE1],REVERSE(SUBSTRING(REVERSE([ADDRLINE1]),1,CHARINDEX(CHAR(13),REVERSE([ADDRLINE1])))),'')))-2)) ELSE NULL END AS Addr3 ,
REVERSE(SUBSTRING(REVERSE([ADDRLINE1]), CHARINDEX(',', REVERSE([ADDRLINE1])) + 1, CHARINDEX(CHAR(10), REVERSE([ADDRLINE1])) - CHARINDEX(',', REVERSE([ADDRLINE1])) - 1)) AS City ,
SUBSTRING([ADDRLINE1], CHARINDEX(',', [ADDRLINE1]) + 2, 2) AS [State] ,
SUBSTRING([ADDRLINE1], CHARINDEX(',', [ADDRLINE1]) + 5, 5) AS ZipCode
FROM @tbl
输出:
Addr1 Addr2 Addr3 City State ZipCode
7710 Computer Ave Ste. 103 suite #123 Edina MN 55435
7710 Computer Ave Ste. 103 NULL Edina MN 55435
注意:State和Zipcode列基于以下假设:值中唯一的逗号将位于City之后。如果这不是一个有效的假设,我可以进行一些编辑。