获取SQL Server

时间:2015-08-03 11:59:03

标签: sql-server crystal-reports

我的SQL Server数据库中有一个表格,其中包含NTEXT类型的列。该列包含地址信息,如下所示:

"Company name
Street + number
Postalcode + City
Country"

有时国家不存在,但前3行始终存在。

我如何才选择第3行?

每一行都以CR + LF (\r\n)

分隔

我需要这个作为SQL Server存储过程的一部分,我使用的列称为RecipientAddress

我需要在SP中完成此操作的原因是我使用数据创建Crystal报表。

或者有没有办法在Crystal Reports的公式中执行此操作?

编辑:目前无法更改用于字段的数据类型,因为字段是ERP系统的一部分,我们无法更改数据类型。

1 个答案:

答案 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