在 SQL Server 2008 中连接三列时结果不正确
Incorrect results when concatenating three columns in SQL Server 2008
我有一个数据库(在 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
如果我尝试 运行 下面的代码 returns 正确的结果:
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/
再次感谢所有提供帮助的人!
检查这是否有效,它与您告诉我们的数据、数据类型和查询相同:
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
我想知道您的值是存储为 char()
还是 space 填充字符串。试试这个:
select rtrim(server) + '/' + rtrim(facility) + '/' + rtrim(site) + '/'
from table1
我有一个数据库(在 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
如果我尝试 运行 下面的代码 returns 正确的结果:
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/
再次感谢所有提供帮助的人!
检查这是否有效,它与您告诉我们的数据、数据类型和查询相同:
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
我想知道您的值是存储为 char()
还是 space 填充字符串。试试这个:
select rtrim(server) + '/' + rtrim(facility) + '/' + rtrim(site) + '/'
from table1