【问题标题】:Parse Name to format of "Lastname,FI" Oracle将名称解析为“Lastname,FI”Oracle 的格式
【发布时间】:2017-09-15 13:59:03
【问题描述】:

我有一个名称格式为“Doe, John”的表格,我需要将其解析为“Doe, J”。我已经编写了一个查询来仅提取姓氏,但我不确定如何修改它以包含逗号和第一个首字母。

SUBSTR(Table.Name,1,INSTR(Table.Name,',',1,1))

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    使用NVLSUBSTRINSTR 的组合。

    SELECT NVL(SUBSTR("namefield", 0, INSTR("namefield", ',')+2), "namefield") AS Name
    FROM yourtable
    

    输入

    Doe, John
    Smith, Mark
    

    输出

    NAME
    Doe, J
    Smith, M
    

    SQL 小提琴:http://sqlfiddle.com/#!4/e1f467/7/0

    【讨论】:

    • 您不应该需要在标识符周围加上双引号。它强制区分大小写,当使用不正确的大小写时可能会导致问题。
    • @MT0 他们的字段名称实际上并没有被称为namefield 他们可以根据需要重命名,逻辑仍然相同,但是我同意没有双引号:)
    • @RonL 仅当您的结果包含NULLs
    • @RonL 不,当namefieldNULL 时,子字符串将仅为NULL,然后您将拥有NVL( NULL, NULL ) - SUBSTR 的第二个参数也应为 1 (因为字符位置是 1 索引而不是 0 索引)。
    【解决方案2】:

    这个怎么样 -

    SELECT SUBSTR(Table.Name,1,INSTR(Table.Name,',',1)+2)
    

    【讨论】:

      【解决方案3】:

      regexp_replace 版本,只要根据您的示例数据,字符串中只有一个空格:

      select regexp_replace('Doe, John', '(.* .).*', '\1')
      

      \1 指的是括号中字符串的匹配部分,即直到并包括最后一个空格和后面的字符的所有字符串,忽略其余部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-21
        • 1970-01-01
        • 2019-05-07
        相关资源
        最近更新 更多