Sql 将名称解析为";姓氏,FI“;神谕

Sql 将名称解析为";姓氏,FI“;神谕,sql,oracle,Sql,Oracle,我有一个名为“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 输入 输出 NAM

我有一个名为“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
输入

输出

NAME
Doe, J
Smith, M
SQL Fiddle:

这个呢-

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

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

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

\1指括号中字符串的匹配部分,它是字符串的所有部分,包括最后一个空格及其后的字符,忽略其余部分。

标识符周围不需要双引号。它强制区分大小写,当使用不正确的大小写时可能会导致问题。@MT0他们的字段名实际上没有被称为
namefield
,他们可以根据自己的意愿重新命名,逻辑仍然是一样的,但我同意没有双引号:)@RonL,只有当你的结果包含
NULL
s@RonL不当
namefield
NULL
时,子字符串将仅为
NULL
,然后您将拥有
NVL(NULL,NULL)
-而且
SUBSTR
的第二个参数应为1(因为字符位置为1索引而非0索引)。
select regexp_replace('Doe, John', '(.* .).*', '\1')