SQL查询从100列中选择一个单词

时间:2019-04-25 05:42:19

标签: sql oracle subquery substring

我在Sh. North Miladhunmadulu - Shaviyani Atoll这样的Oracle表中有100列。我需要一个查询以从上面仅选择Shaviyani。请帮我。我需要选择-之后和Atoll之前的数据。

2 个答案:

答案 0 :(得分:1)

假设您正在谈论的是行而不是列。您可以使用多个逗号分隔的CTE来实现。

下面的查询有3个cte表。表t0将使用'-'函数拉出charindex的位置。然后使用charindex函数,我们可以找到单词Shaviyani之后的下一个空格。如您所见,'-'之后有立即空格。因此,我们将在表t1的表t0.position中添加+2,该表用于查找下一个空格的位置。表t3将使用substring函数获得最终结果。

declare @string nvarchar(50)='Sh. North Miladhunmadulu - Shaviyani Atoll';

with t0 AS (select charindex('-',@string) pos, @string name),
     t1 AS (select charindex(' ',@string,pos+2) pos,name from t0),
     t2 AS (select substring(@string,t0.pos+1,t1.pos - t0.pos) name
            from t0
            inner join t1 on t0.name = t1.name )

select * from t2

输出

name
--------------------------------------------------
 Shaviyani 

答案 1 :(得分:1)

请按照以下说明使用SUBSTRINSTR

SELECT SUBSTR('Sh. North Miladhunmadulu - Shaviyani Atoll',instr ('Sh. North Miladhunmadulu - Shaviyani Atoll','-')+1,
        ((instr ('Sh. North Miladhunmadulu - Shaviyani Atoll','Atoll')-1) - instr ('Sh. North Miladhunmadulu - Shaviyani Atoll','-'))) as OUTPUT
    FROM dual;

此处在Fiddle

输出

用列名和dual替换表名。