2012-02-06 88 views
0

我有一个列A,B,C的表。我的要求是将列A和B的值连接起来,并将其保存到列C. 注意:所有列都是Varchar数据类型。SQL字符串串联

对于e.g:

If A = 100 and B = 200, C should be 100200 
If A = 0 and B = 200, C should be 0200 
If A = NULL AND B = NULL, C should be NULL 
If A = NULL and B = 01, C should be 01 
If A = 01 and B = NULL, C should be 01 

任何想法如何这可以使用SQL实现如果仅列值的一个为NULL,结果不应该是NULL。

我至今是:

select A+B C from myTable; 
+0

使用简单的SQL更新语句列表不能完成此操作吗? – 2012-02-06 07:39:16

回答

1
-- return non NULL value when concatenating NULL and non-NULL values 
SET CONCAT_NULL_YIELDS_NULL OFF 

-- prepare sample data 
CREATE TABLE #t (
    A varchar(15), 
    B varchar(15), 
    C varchar(15) 
) 

INSERT INTO #t (A, B) VALUES 
('100', '200'), 
('0', '200'), 
(NULL, '200'), 
(NULL, NULL), 
(NULL, '01'), 
('01', NULL) 

-- concatenate data 
UPDATE #t SET 
    C = A + B 

-- show 
SELECT * FROM #t 

-- clean up 
DROP TABLE #t 
+0

Thx,但我不确定是否应该设置CONCAT_NULL_YIELDS_NULL,因为这可能会影响其他数据库区域。 – user656523 2012-02-06 09:23:57

+0

只需将其设置为该批次,并在完成后再次打开 – BartekR 2012-02-06 10:01:17

+0

是的。那可以。谢谢! :d – user656523 2012-02-06 11:47:19

0

也许这将帮助: 一些测试数据:

DECLARE @tbl TABLE(A VARCHAR(10),B VARCHAR(10)) 

INSERT INTO @tbl 
SELECT '100','200' UNION ALL 
SELECT '0','200' UNION ALL 
SELECT NULL, NULL UNION ALL 
SELECT NULL,'01' UNION ALL 
SELECT '01',NULL 

查询:

SELECT 
    tbl.A, 
    tbl.B, 
    (
     CASE 
      WHEN tbl.A IS NULL AND tbl.B IS NULL 
      THEN NULL 
      ELSE ISNULL(tbl.A,'')+ISNULL(tbl.B,'') 
     END 
    ) AS C 
FROM 
    @tbl AS tbl 
0
declare @T table(A varchar(10), B varchar(10), C varchar(10)) 

insert into @T(A, B) values 
('100' , '200'), 
('0' , '200'), 
(null , null), 
(null , '01'), 
('01' , null) 

update @T 
set C = case when A is not null or B is not null 
      then isnull(A,'')+isnull(B,'') 
     end