CHAR(4)没有在Table Join中显示FOUR CHAR

时间:2012-06-13 04:27:08

标签: sql sql-server-2008 char sql-server-2008-r2

好的,标题无法正确解释情况。 现在就是这样, 我有一个带列的表

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]

4 个答案:

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