2011-02-17 102 views
0
select THING from FOLDER where THING like '%-%' and ... 

返回喜欢的东西:SQL:截断后,计算元素集合

abc097-01 
def982-02 
ghi13344-01 
ghi13344-02 

现在我需要改变这个查询,这样我可以截断后的部分后计算不同的名称,“ - ”。

因此,对于上面的例子,我会得到3(“abc097”,“def982”和“ghi13344”)。

如何在SQL中编写该代码?

回答

1
Declare @tmp table (field nvarchar(100)) 
insert into @tmp values ('abc097-01') 
insert into @tmp values ('def982-02') 
insert into @tmp values ('ghi13344-01') 
insert into @tmp values ('ghi13344-02') 

select COUNT(*),SUBSTRING(field,0,CHARINDEX('-',field)) 
from @tmp 
group by SUBSTRING(field,0,CHARINDEX('-',field)) 


select distinct(SUBSTRING(field,0,CHARINDEX('-',field))) 
from @tmp -- to get distinct records. 
1

您可以使用CHARINDEXPATINDEX功能找到的位置“ - ”,然后使用LEFTSUBSTRING功能:

select COUNT(DISTINCT SUBSTRING(THING, 1, PATINDEX('%-%', THING) - 1)) 
from FOLDER 
where THING like '%-%' 
+0

非常感谢,我在甲骨文但是这样PATINDEX显然不工作(我使用INSTR,它工作:)。我希望没有需要的SQL服务器或特定于Oracle的查询,会有一种标准的SQL方法来实现这一点。再次感谢:) – Gugussee 2011-02-17 13:20:19