2017-10-17 2 views
0

Oracle v11Concaténer avec une chaîne mais exclure lorsque null

Exclure une chaîne dans une concat lorsque la valeur est NULL?

travail Requête:

Select 
* 
LastName || ',' || FirstName AS Last_First_Name 

--I've tried using NVL & NVL2 
--NVL(LastName || ',' || FirstName,'') AS Last_First_Name2 
FROM TableA 

TableA

LastName FirstName ID 
Smith  Ann  1 
         2 

sortie Je reçois

LastName FirstName ID LastName_FirstName 
Smith  Ann 1 Smith,Ann 
        2 , 

Résultats escomptés:

LastName FirstName ID LastName_FirstName 
Smith  Ann 1 Smith,Ann 
        2  
+1

si un seul est 'null'? –

Répondre

1

Quelque chose comme ça ... J'ai ajouté des entrées simulées pour tester les quatre possibilités. Cependant, notez que si vous pouvez avoir un nom de famille mais pas de prénom, mais aussi un prénom mais pas de nom de famille, la colonne combinée affichera un seul nom mais vous ne saurez pas si elle est en premier ou en dernier. (En outre, lorsqu'une virgule est ajoutée, j'ajoute également un espace après la virgule, comme d'habitude, qui peut être facilement contrôlé si.)

with 
    tablea (lastname, firstname, id) as (
       select 'Smith', 'Ann' , 1 from dual 
    union all select null , null , 2 from dual 
    union all select 'Ang' , null , 3 from dual 
    union all select null , 'Murat', 4 from dual 
) 
-- End of simulated inputs (for testing only, not part of the solution). 
-- SQL query begins BELOW THIS LINE. Use your actual table and column names. 
select lastname, firstname, id, 
     lastname 
     || case when lastname is not null and firstname is not null then ', ' end 
     || firstname 
     as last_first 
from tablea 
; 



LASTNAME FIRSTNAME   ID LAST_FIRST 
---------- ---------- ---------- ------------ 
Smith  Ann     1 Smith, Ann 
           2    
Ang       3 Ang   
      Murat    4 Murat 
1

Utilisez CASE

Select *, 
     CASE WHEN LastName IS NOT NULL AND FirstName IS NOT NULL 
      THEN LastName || ',' || FirstName AS Last_First_Name 
     END lastname_firstname 
FROM TableA 
0

Une façon est d'utiliser une instruction CASE pour ajouter conditionnellement la virgule:

CASE WHEN LastName IS NULL 
    THEN LastName || ',' 
    ELSE NULL 
END 
|| FirstName AS Last_First_Name 
0

Oracle prend en charge NULLIF. Si le prénom et le nom sont null, le résultat sera simplement , qui peut être filtré.

SELECT 
    NULLIF(LastName ||','|| FirstName, ',') AS FullName 
FROM table 

Alternativement, si vous avez besoin pour permettre quand un seul nom est rempli, vous pouvez utiliser TRIM pour enlever des virgules TENDANCIEUSE/arrière.

SELECT 
    TRIM(',', LastName ||','|| FirstName) AS FullName 
FROM table