Oracle SubStr for Description字段

时间:2016-09-29 11:33:23

标签: sql oracle

您好我需要以下方案的帮助。

有一个包含Company_Cd,Company_Name的表格,如果有超过3个单词,我需要的是公司名称中的前2个单词,如果有2个单词,则为1个单词

示例:

Company_Cd     Company_Name
123            ABC SOLUTIONS INC
345            XYZ GLOBAL TECH SOLUTIONS
899            NOWHERE COMPANY INC LTD
654            QSW SOLUTIONS

期望的输出:

Company_Cd     Company_Name
123            ABC SOLUTIONS
345            XYZ GLOBAL
899            NOWHERE COMPANY
654            QSW

4 个答案:

答案 0 :(得分:1)

您可以使用instr函数查找第一个和第二个空格,然后相应地使用substr:

SELECT c.company_name,
  (
  CASE
    WHEN instr(c.company_name,' ',1,2) >0    THEN SUBSTR(c.company_name, 1, instr(c.company_name,' ',1,2))
    WHEN instr(c.company_name,' ',1,2) =0    AND instr(c.company_name,' ',1,1)  >0     THEN SUBSTR(c.company_name, 1, instr(c.company_name,' ',1,1))
    ELSE c.company_name
  END)
FROM customer c

答案 1 :(得分:0)

请查看以下查询供您使用:

  SELECT Company_Cd, IF((length(Company_Name) - length(replace(Company_Name, ' ', '')) + 1) >= 3, SUBSTRING_INDEX(Company_Name, ' ', 2), IF((length(Company_Name) - length(replace(Company_Name, ' ', '')) + 1) >= 2, SUBSTRING_INDEX(Company_Name, ' ', 1), Company_Name)) as result FROM company LIMIT 20;

答案 2 :(得分:0)

您还可以使用正则表达式:

SELECT Company_Cd,
       regexp_replace(company_name,'(((\w+)\s){'||CASE WHEN regexp_count(trim(company_name),' ') IN (0,1) THEN 1
                                                       ELSE 2
                                                       END||'}).*','\1' )
FROM   customer;

答案 3 :(得分:0)

select company_cd, 
       trim(substr(company_name, 1, instr(company_name || '  ', ' ', 1, 2) - 1)) 
from   company_tbl;

此解决方案首先在company_name的末尾添加两个空格;然后它在这个扩展字符串中找到第二个空格的位置,它删除第二个空格及其后面的所有内容 - 然后它修剪最后的剩余空间(仅当公司名称是单个单词时才需要;如果所有公司名称都需要保证至少有两个字,解决方案会更简单。)