【问题标题】:Can't get the last name to display properly in Oracle Table无法在 Oracle 表中正确显示姓氏
【发布时间】:2014-08-05 19:01:35
【问题描述】:

所以,我有一个问题。这可以编译,但如果该人的中间名首字母带有“。”中间的首字母将包含在 last_nm 列中。例如 Julie L. Roberts last_nm 显示为“L. Roberts”而不是 roberts。代码中加星标的部分是问题所在。如果我更改 instr 语句以搜索“。” + 1 然后我修复它,但如果此人没有“。”在 last_nm 列中显示全名。

   NVL (
      LTRIM (
         RTRIM (
            REPLACE (
                  RTRIM (vw_party_person.first_nm)
               || ' '
               || LTRIM (RTRIM (vw_party_person.mid_nm))
               || ' '
               || LTRIM (vw_party_person.last_nm),
               '  ',
               ' '))),
      full_nm)
      full_nm,
   former_nm,
   party_hist_eff_dt,
   party_hist_exp_dt,
   **NVL (vw_party_person.first_nm,
        SUBSTR (DECODE (full_nm, 'null full name', NULL, full_nm),
                1,
                instrc (full_nm,
                        ' ',
                        1,
                        1)))
      first_nm,
   NVL (vw_party_person.last_nm,
        SUBSTR (DECODE (full_nm, 'null full name', NULL, full_nm),
                instrc (full_nm,
                        ' ',
                        1,
                        1)
                + 1))
      last_nm**
  FROM adw.pol_term_party_snapshot,
   vw_party_person,
   vw_party,
   vw_party_hist

【问题讨论】:

    标签: sql oracle plsql logic plsqldeveloper


    【解决方案1】:

    当姓氏似乎可以用作 vw_party_person.last_nm 时,为什么还要从全名中解析出姓氏?

    无论如何。要修复您在问题中列出的内容...

    **NVL (vw_party_person.first_nm,
        SUBSTR (DECODE (full_nm, 'null full name', NULL, full_nm),
                1,
                instrc (full_nm,
                        ' ',
                        1,
                        1)))
      first_nm,
    NVL (vw_party_person.last_nm,
        SUBSTR (DECODE (full_nm, 'null full name', NULL, full_nm),
                DECODE (instrc (full_nm, ' ', 1,2),
                        0, instrc (full_nm, ' ', 1,1),
                        instrc (full_nm, ' ', 1,2))
                + 1))
      last_nm**
    

    如果没有找到字符串,INSTRC 返回 0。因此解码器使用 INSTRC 来查找“”的第二次出现,如果未找到 (0),则返回“”第一次出现的位置。否则返回 ' ' 第二次出现的位置。

    这仍然不是解析名称的好方法,因为您可以根据国籍和格式在名称中包含 2 个以上的空格。但是根据您在问题中提供的信息,这是我能想到的最好的。

    【讨论】:

    • 其实我才发现问题所在。而不是 instrc (full_nm,1,1)+1)) 作为姓氏,我做了 instrc(full_nm,-1,1))) 所以它会从名称的末尾开始并返回以确定第二个位置.感谢您的帮助
    • 我打算建议在过去做了很多地址解析之后,从最后开始几乎总是更好。但是您依赖于适合特定格式的名称。连字符的姓氏怎么样。当你考虑到人们如何输入他们的名字的所有变化时,解析是非常困难的。如果有人在他们的姓氏末尾加上 Jr.、Sr. 或 III 怎么办?
    猜你喜欢
    • 2016-04-28
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2017-10-19
    相关资源
    最近更新 更多