我在Sh. North Miladhunmadulu - Shaviyani Atoll
这样的Oracle表中有100列。我需要一个查询以从上面仅选择Shaviyani
。请帮我。我需要选择-
之后和Atoll
之前的数据。
答案 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)
请按照以下说明使用SUBSTR
和INSTR
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
替换表名。