繁体   English   中英

甲骨文 选择格式的缩写

[英]Oracle. Choose the initials for the format

有一些表具有字段initials 例如,此字段可以包含以下数据:

Francis Bacon
F.B.
F. B.
Immanuel Kant
Immanuel  K.
I. Kant

我想查询以以下格式返回数据:

F.B.
F.B.
F.B.
I.K.
I.K.
I.K.

有什么办法可以在oracle中实现此查询?

使用正则表达式:

SELECT initials,
       REGEXP_REPLACE( initials, '(^|[[:space:]]+)([^[:space:]])[^.[:space:]]*\.?', '\2.' )
         AS short_initials
FROM   your_table

输出:

INITIALS      SHORT_INITIALS
------------- --------------
Francis Bacon F.B.
F.B.          F.B.
F. B.         F.B.
Immanuel Kant I.K.
Immanuel  K.  I.K.
I. Kant       I.K.

更新

如果需要匹配字符串F.Bacon则将第一个+更改为*

SELECT initials,
       REGEXP_REPLACE( initials, '(^|[[:space:]]*)([^[:space:]])[^.[:space:]]*\.?', '\2.' )
         AS short_initials
FROM   your_table

输出:

INITIALS      SHORT_INITIALS
------------- --------------
F.Bacon       F.B.

寻找一个字符,然后是零个或多个字符以及零个或多个空白或点,然后用一个字符后跟一个点代替:

select
  name,
  regexp_replace(name, '([[:alpha:]])[[:alpha:]]*[ .]*', '\1.', 1, 0) as initials
from names;

这不是一个完整的解决方案,但是如果您想在没有RegExp的情况下进行查询,则可以使用类似的方法

select 
case
     when charindex(' ',name) <>0 AND CHARINDEX('.',NAME)<>0 then substring(name,1,1) +'.'+ substring(substring(name,charindex(' ',name),len(name)),2,1) 
     when charindex('.',name) <>0 and charindex('.',name)<>len(name)  then substring(name,1,1) +'.'+ substring(substring(name,charindex('.',name),len(name)),2,1) 
end from @temp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM