如何获取字符串的最后一个字母

Dwa*_*dar 8 oracle

嗨,大家好想问我怎么能得到一个字符串的最后一个字母并检查它是否是元音或辅音.顺便说一下我使用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 
Run Code Online (Sandbox Code Playgroud)

现在当您在oracle 10g上执行此操作时,"First Letter Description"为空!请帮助我,您认为我的代码有什么问题?

小智 13

试试这个,不完整,但通过简单的调整,你可以按照你想要的方式工作:

 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;
Run Code Online (Sandbox Code Playgroud)

  • @DwayneRadar我不确定你能比单一的CASE声明更简单... (2认同)

小智 5

看看你的数据。机会是雇员中的第一个字符。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 
Run Code Online (Sandbox Code Playgroud)