Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何获取字符串的最后一个字母?_Oracle - Fatal编程技术网

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

Oracle 如何获取字符串的最后一个字母?,oracle,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'

如何获取字符串的最后一个字母并检查它是元音还是辅音?我正在使用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上执行此操作时,“第一个字母描述”为空!我的代码出了什么问题?

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

 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;

看看你的数据。Opportunities是employees中的第一个字符。姓氏大写。记住,Oracle是区分大小写的。您可以使用UPPER()或LOWER()来帮助查找匹配项

此外,如乔所建议的那样,只搜索元音并使用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 

是否检查SQL中的oracle函数substr和regexp?PL/SQL?你期望一个布尔结果吗?如果最后一个字母是“Y”怎么办?我想用Oracle来做,你能简化一下吗?我需要从employees表中检索数据,所以这对我来说有点复杂。@DwayneRadar我不确定你能得到比单个案例陈述简单多少……我同意lc。我再简单不过了。此函数测试字符串的最后一个字符,并检查它是否为“a”、“e”、“i”、“o”或“u”。如果要在SQL中使用此函数,必须在此函数上构建包装器。