Jam*_*mie 5 sql database sql-server sql-server-2005
我在表中有一个Address列,我需要在SQL Server 2005的视图中拆分成多列.我需要在换行符chr(10)上拆分列,并且可能有1到4行列中的(0到3行换行).以下是我需要做的几个例子.实现这一目标的最简单方法是什么?
Examples:
Address Address1 Address2 Address3 Address4
------------ = ----------- ----------- ----------------- ---------
My Company My Company 123 Main St. Somewhere,NY 12345
123 Main St.
Somewhere,NY 12345
Address Address1 Address2 Address3 Address4
------------ = ------------ ---------- ----------- ---------
123 Main St. 123 Main St.
Run Code Online (Sandbox Code Playgroud)
这将使用 parsename 函数分割地址,并将其与 COALESCE 结合起来,以在正确的列中获取正确的信息
如果你的行数超过 4 行,此方法将不起作用
编辑:添加代码以反转顺序
create table #test (address varchar(1000))
--test data
insert #test values('My Company
123 Main St.
Somewhere,NY 12345')
insert #test values('My Company2
666 Main St.
Bla Bla
Somewhere,NY 12345')
insert #test values('My Company2')
--split happens here
select
replace(parsename(address,ParseLen +1),'^','') as Address1,
replace(parsename(address,ParseLen ),'^','') as Address2,
replace(parsename(address,ParseLen -1),'^','') as Address3,
replace(parsename(address,ParseLen -2),'^','') as Address4
from(
select case ascii(right(address,1)) when 10 then
replace(replace(left(address,(len(address)-1)),'.','^'),char(10),'.')
else
replace(replace(address,'.','^'),char(10),'.') end as address,
case ascii(right(address,1)) when 10 then
len(replace(replace(address,'.','^'),char(10),'.')) -
len(replace(replace(address,'.','^'),char(10),'')) -1
else
len(replace(replace(address,'.','^'),char(10),'.')) -
len(replace(replace(address,'.','^'),char(10),'')) end as ParseLen
from #test) x
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10893 次 |
| 最近记录: |