2012-11-04 30 views
5

Ciao ragazzi volevo solo chiedere come posso ottenere l'ultima lettera di una stringa e controllare se è vocale o consonante. dal modo in cui sto usando oracle 10g. grazie per coloro che mi aiuteranno. pace!Come ottenere l'ultima lettera di una stringa

ecco cosa mi è venuta già:

SELECT last_name, 
     Substr(last_name, -1, 1) "Last letter", 
     Substr(last_name, 1, 1) "First letter", 
     CASE 
     WHEN Substr(last_name, -1, 1) IN ('a', 'e', 'i', 'o', 'u') THEN 
     'ends with a vowel' 
     WHEN Substr(last_name, -1, 1) IN ('b', 'c', 'd', 'f', 
              'g', 'h', 'j', 'k', 
              'l', 'm', 'n', 'p', 
              'q', 'r', 's', 't', 
              'v', 'w', 'x', 'y', 'z') THEN 
     'ends with a consonant' 
     END      "Last Letter Description", 
     CASE 
     WHEN Substr(last_name, 1, 1) IN ('a', 'e', 'i', 'o', 'u') THEN 
     'starts with a consonant' 
     WHEN Substr(last_name, 1, 1) IN ('b', 'c', 'd', 'f', 
              'g', 'h', 'j', 'k', 
              'l', 'm', 'n', 'p', 
              'q', 'r', 's', 't', 
              'v', 'w', 'x', 'y', 'z') THEN 
     'starts with a consonant' 
     END      "First Letter Description" 
FROM employees 
GROUP BY first_name, 
      last_name 

ora quando si esegue questo su Oracle 10g la "Prima Lettera Descrizione" è vuoto! Aiutami per favore cosa pensi che sia sbagliato con il mio codice?

+0

controllare le funzioni di oracle substr e regexp –

+0

In SQL? PL/SQL? Ti aspetti un risultato booleano? Cosa succede se l'ultima lettera è "Y"? – Wolf

+0

Sto provando a farlo in Oracle –

risposta

9

Prova questa, non è completo, ma con semplici regolazioni è possibile farlo funzionare nel modo desiderato:

FUNCTION last_is_vowel (string_in VARCHAR2) 
    RETURN BOOLEAN 
IS 
BEGIN 
    RETURN CASE WHEN LOWER(SUBSTR(string_in, -1)) IN ('a', 'e', 'i', 'o', 'u') 
       THEN TRUE 
       ELSE FALSE 
      END; 
END last_is_vowel; 
+0

puoi renderlo più semplice? Ho bisogno di recuperare i dati dalla tabella dei dipendenti, quindi questo è un po 'complicato per me. –

+2

@DwayneRadar Non sono sicuro di quanto sia più semplice ottenere una singola istruzione CASE ... –

+0

Sono d'accordo con lc. Non posso renderlo molto più semplice di così. Questa funzione verifica l'ultimo carattere della stringa e controlla se è 'a', 'e', ​​'i', 'o' o 'u'. È necessario creare un wrapper con questa funzione se si desidera utilizzarlo in SQL. –

3

Guardate i vostri dati. Le probabilità sono il primo carattere in employees.last_name è in maiuscolo. Ricorda, Oracle è case sensitive. Puoi usare UPPER() o LOWER() per trovare la tua corrispondenza.

Inoltre sarebbe più efficiente cercare solo le vocali e utilizzare un'altra istruzione per trovare le esclusioni come suggerisce João.

SELECT last_name, 
     Substr(last_name, -1, 1) "Last character", 
     Substr(last_name, 1, 1) "First character", 
     CASE 
     WHEN lower(Substr(last_name, -1, 1)) IN ('a', 'e', 'i', 'o', 'u') THEN 
     'ends with a vowel' 
     ELSE 
     'does not end with a vowel' 
     END      "Last Letter Description", 
     CASE 
     WHEN lower(Substr(last_name, 1, 1)) IN ('a', 'e', 'i', 'o', 'u') THEN 
     'starts with a vowel' 
     ELSE 
     'does not start with a vowel' 
     END      "First Letter Description" 
FROM employees 
GROUP BY first_name, 
      last_name 
Problemi correlati