Конкатенация строк SQL - PullRequest
       5

Конкатенация строк SQL

0 голосов
/ 06 февраля 2012

У меня есть таблица со столбцами A, B, C. Мне нужно объединить значения столбцов A и B и сохранить их в столбце C. Примечание. Все столбцы имеют тип данных Varchar.

Например:

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;

Ответы [ 3 ]

1 голос
/ 06 февраля 2012
-- 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 голосов
/ 06 февраля 2012
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
0 голосов
/ 06 февраля 2012

Может быть, это поможет: Некоторые тестовые данные:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...