2012-11-04 107 views
5

嗨,大家只是想問我如何得到字符串的最後一個字母,並檢查它是元音還是輔音。順便說一句,使用Oracle 10g。感謝那些會幫助我的人。和平!如何獲得字符串的最後一個字母

這裏就是我想出了已經:

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 

現在,當你執行這個在Oracle 10g中的「第一個字母描述」是空的!請幫助我,請問您認爲我的代碼有什麼問題?

+0

檢查oracle函數substr和regexp –

+0

在SQL中? PL/SQL?你期望一個布爾結果嗎?如果最後一個字母是'Y'呢? – Wolf

+0

我想在oracle中執行 –

回答

9

試試這個,不完整的,但易於調整,你可以把它工作,你想要的方式:

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

你可以使這個更簡單嗎?我需要從employees表中檢索數據,所以這對我來說有點複雜。 –

+2

@DwayneRadar我不知道你可以得到多少比一個單一的CASE聲明更簡單... –

+0

我同意lc。我不能說比這更簡單。 該函數測試字符串的最後一個字符並檢查它是'a','e','i','o'還是'u'。 如果你想在SQL中使用它,你必須在這個函數上構建一個包裝器。 –

3

看看你的數據。機會是employees.last_name中的第一個字符是大寫。請記住,Oracle是區分大小寫的。你可以使用UPPER()或LOWER()來幫助找到你的匹配。

此外,如João建議的那樣,僅搜索元音並使用else語句來查找排除項會更有效。

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 
相關問題