【发布时间】:2017-09-15 13:59:03
【问题描述】:
我有一个名称格式为“Doe, John”的表格,我需要将其解析为“Doe, J”。我已经编写了一个查询来仅提取姓氏,但我不确定如何修改它以包含逗号和第一个首字母。
SUBSTR(Table.Name,1,INSTR(Table.Name,',',1,1))
【问题讨论】:
我有一个名称格式为“Doe, John”的表格,我需要将其解析为“Doe, J”。我已经编写了一个查询来仅提取姓氏,但我不确定如何修改它以包含逗号和第一个首字母。
SUBSTR(Table.Name,1,INSTR(Table.Name,',',1,1))
【问题讨论】:
使用NVL、SUBSTR 和INSTR 的组合。
SELECT NVL(SUBSTR("namefield", 0, INSTR("namefield", ',')+2), "namefield") AS Name
FROM yourtable
输入
Doe, John
Smith, Mark
输出
NAME
Doe, J
Smith, M
【讨论】:
namefield 他们可以根据需要重命名,逻辑仍然相同,但是我同意没有双引号:)
NULLs
namefield 为NULL 时,子字符串将仅为NULL,然后您将拥有NVL( NULL, NULL ) - SUBSTR 的第二个参数也应为 1 (因为字符位置是 1 索引而不是 0 索引)。
这个怎么样 -
SELECT SUBSTR(Table.Name,1,INSTR(Table.Name,',',1)+2)
【讨论】:
regexp_replace 版本,只要根据您的示例数据,字符串中只有一个空格:
select regexp_replace('Doe, John', '(.* .).*', '\1')
\1 指的是括号中字符串的匹配部分,即直到并包括最后一个空格和后面的字符的所有字符串,忽略其余部分。
【讨论】: