我的SQL Server数据库中有一个表格,其中包含NTEXT
类型的列。该列包含地址信息,如下所示:
"Company name
Street + number
Postalcode + City
Country"
有时国家不存在,但前3行始终存在。
我如何才选择第3行?
每一行都以CR + LF (\r\n)
我需要这个作为SQL Server存储过程的一部分,我使用的列称为RecipientAddress
我需要在SP中完成此操作的原因是我使用数据创建Crystal报表。
或者有没有办法在Crystal Reports的公式中执行此操作?
编辑:目前无法更改用于字段的数据类型,因为字段是ERP系统的一部分,我们无法更改数据类型。
答案 0 :(得分:0)
我没有使用patindex因为我认为你没有使用SS2014 / 16
它适用于一组地址,但可以使用变量一次更改为仅使用一个值
我使用了2个CTE,因为它更容易以这种方式读取和写入查询。如果您只处理变量中的1个地址,则可以使用中间变量。
下面的代码可以在Management Studio中测试(它创建1表示国家/地区,1表示没有国家/地区):
declare @delim varchar(10) = char(13)+char(10)
declare @table table(ID int, Address varchar(max))
insert into @table(ID, Address) values(0, 'Company name1
Street 1000
92345 City
Country')
insert into @table(ID, Address) values(1, 'Company name
Street 1000
92345 City')
; With row_start as(
Select ID, Address, pos_start = charindex(@delim, Address, charindex(@delim, Address, 0)+1)+len(@delim)
From @table
)
, row_end as (
Select ID, Address, pos_start, pos_end = charindex(@delim, Address,pos_start+1)
From row_start
)
Select ID, Address
, Zip_City = substring(Address, pos_start, (case when pos_end = 0 then len(Address)+1 else pos_end end) - pos_start)
From row_end