2010-12-10 59 views
2

Je dois écrire une instruction SQL comme ceci:En utilisant Decode comme une déclaration comme dans l'oracle

SELECT id_segmento AS Segmento, Decode (id_segmento , '1' , 'a', 'b') 

FROM mapchile.segmento 

mais dans ce cas, je vais obtenir un « a », quand id_segmento est égal à « 1 », j'ai besoin il est 'a' même quand la chaîne id_Segmento contient le '1', genre de statment similaire.

Il existe une autre commande comme Decode qui fonctionne de cette façon?

Merci.

Répondre

6

j'utiliser une déclaration de cas. Quelque chose comme

case 
    when id_segmento like '%1%' then 'a' 
    else 'b' 
end 
+0

voulez-vous dire ''% 1% ''? –

+0

Oui. Édité. Merci, Jack. –

4

Utilisez l'opérateur CASE pour l'évaluation complexe au lieu de la fonction DECODE:

SELECT id_segmento AS Segmento, 
     CASE 
      WHEN id_segmento LIKE '%1%' THEN 
      'a' 
      ELSE 
      'b' 
     END 
    FROM mapchile.segmento 
+0

Voulez-vous dire ' '% 1% '? –

+0

@JackPDouglas: oui, merci –

3

si vous ne voulez pas utiliser case vous pouvez toujours utiliser decode et instr:

decode(instr(id_segmento,'1'),0,'b','a') 

Je suppose que vous voulez faire correspondre un « 1 » partout dans le champ . Si vous voulez faire correspondre les champs qui commencent par un '1', alors vous pouvez utiliser:

decode(ascii(id_segmento),49,'a','b') 

ou

decode(substring(id_segmento,1,1),'1','a','b') 

ou

decode(instr(id_segmento,'1'),1,'a','b')