Come concatenare solo se non è nullo in SQL Server?
Ho questo tavolo:
PersonTable
| id | name |
---------------
| 10 | Mike |
| NULL | Jane |
Voglio selezionare id e nome dalla tabella e utilizzare concat on id, ma solo se non è nullo, in questo modo:
+------+------+
| Id | Name |
+------+------+
| A10 | Mike |
| NULL | Jane |
+------+------+
Ho provato quanto segue:
SELECT ISNULL(concat('A', id), NULL) AS id, name FROM PeronTable
Ma la mia query restituisce questo:
+-----+------+
| Id | Name |
+-----+------+
| A10 | Mike |
| A | Jane |
+-----+------+
Risposte
Hmmm. Puoi usare +invece di concat():
select 'A' + convert(varchar(255), id), name
from t;
convert()(o cast()) è necessario assumendo che idsia un numero e non una stringa.
+restituisce NULLse un argomento è NULL; concat()ignora gli NULLargomenti.
Ovviamente puoi usare concat()con caseun'espressione:
select (case when id is not null then concat('A', id) end), name
from t;
Puoi provare come il codice seguente per ottenere la soluzione prevista:
Select 'A' + convert(varchar(255), id) AS id, name
from PeronTable;
Ecco uno screenshot di esempio:
Puoi semplicemente usare NULLIF()come segue:
SELECT NULLIF(CONCAT('A', Id), 'A') Id,
Name
FROM
(
VALUES
(10, 'Mike'),
(NULL, 'Jane')
) T(Id, Name);
O
SELECT TT.Value Id,
T.Name
FROM
(
VALUES
(10, 'Mike'),
(NULL, 'Jane')
) T(Id, Name) CROSS APPLY(VALUES (NULLIF(CONCAT('A', Id), 'A'))) TT(Value);
La funzione CONCAT()restituirà 'A'se la Idcolonna è NULL, quindi devi solo controllare se ritorna 'A'usando la NULLIF()funzione che restituirà NULLse la stringa concatenata = A.
Puoi anche usare l' CASEespressione se vuoi come:
SELECT CASE WHEN TT.Value <> 'A' THEN Value END Id,
T.Name
FROM
(
VALUES
(10, 'Mike'),
(NULL, 'Jane')
) T(Id, Name) CROSS APPLY(VALUES (CONCAT('A', Id))) TT(Value);