我不知道用这个名字删掉字母的有效方法。例如,f_name列有Jenny, Johnny, Doe, Ken, Smith。
我想用这些名字删掉这封信,所以它只包含前两个字母。像Je, Jo, Do, Ke, Sm一样作为新列的输出。
但这些名称中的字母并不相同,比如Johnny有6个字母,John有4个字母。
是否有任何有效的方法来修剪不均匀字符的长度,而不计算所有字符的长度在f_name和放置所有条件,以修剪所有的名字。就像下面这些。
CASE WHEN LENGTH(f_name) > 4 THEN LTRIM(f_name, 2)发布于 2016-10-21 06:34:06
对于Oracle,请使用substr()
with data (f_name) as (
select 'Jenny' from dual union all
select 'Johnny' from dual union all
select 'Doe' from dual union all
select 'Ken' from dual union all
select 'Smith' from dual
)
select substr(f_name, 1, 2)
from data返回:
SUBSTR(F_NAME,1,2)
------------------
Je
Jo
Do
Ke
Sm 发布于 2016-10-21 06:44:09
使用超规则
CASE WHEN LENGTH(f_name) > 4 THEN SUBSTR(f_name,1, 2)发布于 2016-10-21 07:11:41
如果你想从所有名字中得到最少的首字母缩写。你可以写这样的东西
with s as (select level as lvl from dual connect by level <(select max(LENGTH(f_name)) from your_table ))
select f_name,
max(sub_f_name) keep (dense_rank FIRST order by cnt, t.lvl desc) as least_acronym
select f_name
, substr(t.f_name,-lvl) as sub_f_name
, t.lvl
, count(*) over (partition by substr(t.f_name,-lvl)) as cnt
from your_table t
, s)
group by f_name注意:就像想法一样。还没有测试
https://stackoverflow.com/questions/40169278
复制相似问题