首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在栏中删掉字母

问如何在栏中删掉字母
EN

Stack Overflow用户
提问于 2016-10-21 05:50:32
回答 3查看 57关注 0票数 0

我不知道用这个名字删掉字母的有效方法。例如,f_name列有Jenny, Johnny, Doe, Ken, Smith。

我想用这些名字删掉这封信,所以它只包含前两个字母。像Je, Jo, Do, Ke, Sm一样作为新列的输出。

但这些名称中的字母并不相同,比如Johnny有6个字母,John有4个字母。

是否有任何有效的方法来修剪不均匀字符的长度,而不计算所有字符的长度在f_name和放置所有条件,以修剪所有的名字。就像下面这些。

代码语言:javascript
复制
CASE WHEN LENGTH(f_name) > 4 THEN LTRIM(f_name, 2)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-21 06:34:06

对于Oracle,请使用substr()

代码语言:javascript
复制
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

返回:

代码语言:javascript
复制
SUBSTR(F_NAME,1,2)
------------------
Je                
Jo                
Do                
Ke                
Sm                
票数 0
EN

Stack Overflow用户

发布于 2016-10-21 06:44:09

使用超规则

代码语言:javascript
复制
   CASE WHEN LENGTH(f_name) > 4 THEN SUBSTR(f_name,1, 2)
票数 0
EN

Stack Overflow用户

发布于 2016-10-21 07:11:41

如果你想从所有名字中得到最少的首字母缩写。你可以写这样的东西

代码语言:javascript
复制
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

注意:就像想法一样。还没有测试

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40169278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档