SQLDeveloper - 检查另一列中的一列

SQLDeveloper - Check for a column within another column

我目前正在尝试查询 Last_Name 列是否在 Last_Name 的末尾添加了后缀。

我有一个后缀 Table(SUFFIX),它存储可用的后缀(I、II、III、IV、V、Jr.、Sr.),但是我 运行 遇到了麻烦我执行了以下查询,因为它显示了所有姓氏,即使它在 LAST_NAME 列的末尾不包含后缀。

SELECT
NAMES.RECORD_NAME
, NAMES.LAST_NAME
, NAMES.FIRST_NAME
, NAMES.SUFFIX_C AS SUFFIX_ID
, SUFFIX.name AS SUFFIX
, USERS.USER_ID
, NAMES.RECORD_ID

FROM
USERS
left join NAMES ON USERS.NAME_RECORD_ID = NAMES.RECORD_ID
left join SUFFIX ON NAMES.SUFFIX_C = SUFFIX.suffix_c

WHERE
NAMES.SUFFIX_C IS NOT NULL
AND  SUFFIX.name in (select NAMES.LAST_NAME from NAMES)

我想做的是: 如果 Suffix = IV 并且姓氏是 SmithIV(包含后缀)在姓氏末尾显示在我的结果中。

出于某种原因,后缀被添加到一些姓氏中,我正在尝试确定有多少人受到影响。

我是这样理解这个问题的。

第 1 - 15 行代表示例数据;有趣的部分是第 19 - 21 行,其中 select 来自姓氏的最后 "several" 个字符,其中 "several" 等于后缀本身的长度。

SQL> with
  2  -- sample data
  3  names (first_name, last_name, suffix_c) as
  4    (select 'Little', 'Foot'   , 1 from dual union all
  5     select 'Big'   , 'FootIV' , 4 from dual union all
  6     select 'Scott' , 'TigerSr', 5 from dual union all
  7     select 'Mike'  , 'Lion'   , 6 from dual
  8    ),
  9  suffix (suffix_c, name) as
 10    (select 1, 'I'  from dual union all
 11     select 2, 'II' from dual union all
 12     select 4, 'IV' from dual union all
 13     select 5, 'Sr' from dual union all
 14     select 6, 'Jr' from dual
 15    )
 16  -- query you might need
 17  select n.*
 18  from names n join suffix s on s.suffix_c = n.suffix_c
 19  where substr(n.last_name,
 20               length(n.last_name) - length(s.name) + 1,
 21               length(s.name)
 22              ) = s.name;

FIRST_NAME LAST_NAME    SUFFIX_C
---------- ---------- ----------
Big        FootIV              4
Scott      TigerSr             5

SQL>