如何删除列

时间:2016-10-21 05:50:33

标签: sql oracle

我不知道修剪名字中字母的有效方法。例如,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)

3 个答案:

答案 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。就像想法一样。尚未测试