2012-06-13 28 views
0

好的標題無法正確解釋情況。 現在,這是它, 我有列CHAR(4)沒有在表格中顯示四個CHAR加入

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)

感謝球員..


EDIT 2012/08/06:

另一種解決方案,我發現工作是第1列改變表2(CHAR(4),NULL)。 這可以通過 ALTER TABLE來完成[表名]修改[列名] [column_data_type] [空| NOT NULL]

回答

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 ' 
+0

一個條件是我的SOxx1 col2是允許NULL,而SOxx2 col2不是NULL 我也不知道這將如何發生,但我剛解決它。謝謝 – Robin1990

-1
SELECT (ISNULL(a.Columns1,'') +ISNULL(b.Columns1,'')) AS WhatEver FROM Table1 a left join Table2 b on a.Columns0 = b.Columns0 
+0

你是否有空間結束的數據? – DevT

+0

OP期待着從他的數據中出現空間:他有「'ARR'」+「'ARR'」,並期待着「'ARR ARR'」。 – Blorgbeard

+0

哎呀..對不起..我會檢查。沒有看到空間 – DevT

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

+0

然後,我真的不明白髮生了什麼.. Yah我的數據類型是CHAR(4)。 – Robin1990

+0

您是在SSMS中執行腳本還是通過其他程序執行腳本? – Blorgbeard

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