2011-02-17 65 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