我想连接三个栏目 - 街道,街道号码和城市到一列"地址"。奇怪的是,我出于某种原因不能这样做。
这是我到目前为止所尝试的:
SELECT street,
street_num,
city,
isnull(street,'') + '' + isnull(street_num,'') + '' + isnull(city,'') AS tst1, --doesnt work
concat(isnull(street,''),' ',isnull(street_num,''), ' ', isnull(city,'')) AS tst2, --doesnt work
(street_num + ' ' + street) AS tst3, --does work
(street_num + ' ' + city) AS tst4, --does work
(city + ' ' + street) AS tst5 --doesnt work
FROM [DB].[dbo].[adresses]
请注意,+
或concat
不起作用,它只显示这些情况下的第一列,街道。但是,如果我从街道号码开始并添加街道或城市,它确实有效。但是,如果我尝试添加第三列,则不会显示。
如果有帮助,该表是通过OPENQUERY从Oracle中提取的,表结构如下:
street VARCHAR(100), null
street_num VARCHAR(50), null
city VARCHAR(100), null
我在MSSQL 2014上。
修改
正如评论中所述,当我处理客户地址时,我无法显示数据。以下是两个虚拟记录加上预期结果(地址)作为示例:
street | street_num | city | adress
--------------------------------------------------------------------
avenida pino alto | 45 | avila | avenida pino alto 45 avila
rue de abaixo | 86 | madrid | rue de abaixo 86 madrid
此外,如果我复制记录并做这样的事情,它当然有效。
SELECT 'avenida pino alto' + ' ' + '45' + ' ' + 'avila'
答案 0 :(得分:1)
根据评论,您的street
列似乎包含一些导致问题的字符/数据。
我不知道它可能是什么,但你可以尝试找出这样的结果:
select top 10
street,
len(street) as streetCharLen,
cast(street as varbinary(500)) as streetBytes
from [DB].[dbo].[adresses]
然后比较不同栏目告诉你的内容。
这是一个快速示例:
declare @t table (
id int,
thestring varchar(50)
)
insert into @t values (1, 'test')
select thestring,
len(thestring) as slen,
cast(thestring as varbinary(100)) as sbytes
from @t
如果在此示例中,slen
不是4,或者sbytes
包含的某些内容未映射回我在选择时看到的其中一个字符,则字符串出现问题
答案 1 :(得分:0)
使用convert(varchar,[exp]):
SELECT street,
street_num,
city,
isnull(convert(varchar,street),'') + '' + isnull(convert(varchar,street_num),'') + '' + isnull(convert(varchar,city),'') AS tst1
FROM [DB].[dbo].[adresses]
答案 2 :(得分:0)
请尝试以下操作。
select isnull((convert varchar(250),street),'')+isnull((convert varchar(250),[street number]),'')+
isnull((convert varchar(250),[city]),'') as 'Adress'
from .......(your query)