好的,标题无法正确解释情况。 现在就是这样, 我有一个带列的表
Table1
Columns0, CHAR(20), NOT NULL.
Columns1, CHAR(4), Allow Nulls.
Data : 'ARR '
Table2
Columns0, CHAR(20), NOT NULL.
Columns1, CHAR(4), NOT NULL.
Data : 'ARR '
然后我一起加入两张桌子。
SELECT (ISNULL(a.Columns1,'') + ISNULL(b.Columns1,'')) AS WhatEver
FROM Table1 a
left join Table2 b on a.Columns0 = b.Columns0
结果应显示为'ARR ARR '
而不是这个,它显示为'ARRARR '
为什么会这样?
编辑2012/06/11:
在挣扎之后,我最终做了以下事情:
SELECT ISNULL(CONVERT(CHAR(4),a.Columns1),'') + ISNULL(b.Columns1,'')
然后我才得到正确的结果'ARR ARR '
但我非常确定数据库中的数据类型为CHAR(4)
。
谢谢你们..
编辑2012/08/06:
我发现的另一个解决方案是将TABLE 2 COLUMN 1更改为(CHAR(4),NULL)。 这可以通过完成 ALTER TABLE [table_name] MODIFY [column_name] [column_data_type] [null | not null]
答案 0 :(得分:1)
您的示例在我的服务器上运行正常(SQL Server 2008 R2):
create table SOxx1
(
col1 char(4),
col2 char(20) not null
)
create table SOxx2
(
col1 char(4),
col2 char(20) not null
)
Go
insert into SOxx1 (col1, col2) VALUES ('ARR ', 'abc')
insert into SOxx2 (col1, col2) VALUES ('ARR ', 'abc')
go
SELECT (ISNULL(a.col1,'') + ISNULL(b.col1,'')) AS WhatEver
FROM SOxx1 a
left join SOxx2 b on a.Col2 = b.Col2
-- OUTPUT is 'ARR ARR '
答案 1 :(得分:0)
您确定列是CHAR
而不是VARCHAR
吗?
从SQL Server获得结果后,什么都没有剥离空格?
你可以试试这个:
declare @table1 table (id int, one char(4))
declare @table2 table (id int, one char(4))
insert into @table1 values (1 ,'ARR ')
insert into @table2 values (1 ,'ARR ')
select (isnull(a.one,'') + isnull(b.one,'')) AS WhatEver
from @table1 a left join @table2 b on a.id = b.id
我按预期得到了
ARR ARR
答案 2 :(得分:0)
您尝试过不同的排序规则吗?
SELECT ISNULL(a.Columns1,'') collate Latin1_General_BIN + ISNULL(b.Columns1,'') collate Latin1_General_BIN AS WhatEver
FROM Table1 a
left join Table2 b on a.Columns0 = b.Columns0
答案 3 :(得分:-1)
SELECT (ISNULL(a.Columns1,'') +ISNULL(b.Columns1,'')) AS WhatEver FROM Table1 a left join Table2 b on a.Columns0 = b.Columns0