在SQL Server 2008中连接三列时,结果不正确

时间:2015-08-25 15:27:49

标签: sql-server sql-server-2008 concatenation

我有一个数据库(在SQL Server 2008中),其中包含网站URL的各个部分,我正在尝试连接它们以创建完整的URL。让我们说这是我的数据:

                 --table1
--------server-------|---facility---|---site---|
https://example.com  |     wah      |   blah   |
https://example2.com |     foo      |   bar    |

我想输出这个:

https://example.com/wah/blah/
https://example2.com/foo/bar/

我尝试了以下查询,并且都返回了相同的结果:

select server + '/' + facility + '/' + site + '/' from table1

select {fn CONCAT(server, {fn CONCAT(facility, site)})} from table1

select left(server, 128) + '/' + left(facility, 128) + '/' + left(site, 128) + '/' 
    from table1

select convert(varchar(1024), server) +  '/' + convert(varchar(1024), facility)
        + '/' + convert(varchar(1024), site) + '/'
    from table1

所有这些查询都会输出以下结果:

https://example.com
https://example2.com

如果我尝试运行下面的代码,则返回正确的结果:

select 'aa' + '/' + 'bb'
--this code returns "aa/bb"

因此,我不认为这是我的软件中的错误。我也尝试将数据转换为varchar(1024)然后连接,没有运气。

我不确定是否有一些我需要更改的设置,如果我的数据以某种方式损坏,或者我的代码不正确。任何帮助将不胜感激。如果您需要任何其他信息,请与我们联系。

________________________ SOLUTION _______________________

非常感谢大家。这让我头疼不已。

最终结果是每列末尾都有一个不可打印的字符。我使用下面的代码来获得所需的结果:

select left(server, len(server)-1)+ '/' +left(facility, len(facility)-1)+ '/' +left(room, len(room)-1)+ '/' 
    from table1

此输出:

https://example.com/wah/blah/
https://example2.com/foo/bar/

再次感谢所有帮助过的人!

2 个答案:

答案 0 :(得分:1)

检查这是否有效,它是您告诉我们的相同数据,数据类型和查询:

DECLARE @table table (server varchar(512), facility varchar(128), site varchar(128))

INSERT INTO @table
VALUES ('https://example.com','wah','blah'),
       ('https://example2.com','foo','bar')


select server + '/' + facility + '/' + site + '/' from @TABLE


select left(server, 128) + '/' + left(facility, 128) + '/' + left(site, 128) + '/' 
    from @TABLE

select convert(varchar(1024), server) +  '/' + convert(varchar(1024), facility)
        + '/' + convert(varchar(1024), site) + '/'
    from @TABLE

答案 1 :(得分:0)

我想知道您的值是存储为char()还是存储为空格填充字符串。试试这个:

select rtrim(server) + '/' + rtrim(facility) + '/' + rtrim(site) + '/'
from table1