我不知道修剪名字中字母的有效方法。例如,f_name
列有Jenny, Johnny, Doe, Ken, Smith
。
我想删除这些名字中的字母,因此它只包含前2个字母。与Je, Jo, Do, Ke, Sm
一样,作为新列的输出。
但是这些名字中的字母没有相同数量的字母,例如Johnny
有6个字母而John
有4个字母。
是否有任何有效的方法可以修剪不均匀字符的长度,而不计算f_name
中所有字符的长度,并将所有条件设置为修剪所有名称。如下所示。
CASE WHEN LENGTH(f_name) > 4 THEN LTRIM(f_name, 2)
答案 0 :(得分:0)
对于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
答案 1 :(得分:0)
使用SUBSTRING
CASE WHEN LENGTH(f_name) > 4 THEN SUBSTR(f_name,1, 2)
答案 2 :(得分:0)
如果你想获得所有名字的最小首字母缩略词。你可以写一些像
这样的东西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
NB。就像想法一样。尚未测试