Sql 将名称解析为";姓氏,FI“;神谕
我有一个名为“Doe,John”的表,我需要将其解析为“Doe,J”。我已经编写了一个只提取姓氏的查询,但我不确定如何修改它以包含逗号和首字母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
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')