0

好吧,标题不能足够正确地解释这种情况。现在就是这样,我有一个带有列的表

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

4 回答 4

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 '
于 2012-06-13T04:42:26.053 回答
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
于 2012-06-13T05:41:37.487 回答
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

于 2012-06-13T04:39:28.577 回答
-1
SELECT (ISNULL(a.Columns1,'') +ISNULL(b.Columns1,'')) AS WhatEver FROM Table1 a left join Table2 b on a.Columns0 = b.Columns0
于 2012-06-13T04:30:52.037 回答