您好我需要以下方案的帮助。
有一个包含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
答案 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的末尾添加两个空格;然后它在这个扩展字符串中找到第二个空格的位置,它删除第二个空格及其后面的所有内容 - 然后它修剪最后的剩余空间(仅当公司名称是单个单词时才需要;如果所有公司名称都需要保证至少有两个字,解决方案会更简单。)