2012-04-07 9 views

Antwort

3

zählen, wie viele Zeichen geht weg, wenn Sie die Vorkommen des Wortes, und dividieren durch die Länge des Wortes entfernen:

(len(aaa) - len(replace(aaa, 'asdf', '')))/len('asdf') 
+1

Ja, das ist eine gängige Methode, dies zu tun . Schade, dass es nicht gut mit Werten arbeitet, die mit einem Leerzeichen enden, aber es sollte für das OP funktionieren, da sie * words * (also keine nachgestellten Leerzeichen) wollen. –

1

Hinweis: Ich habe eine andere Lösung auf XQuery count function, zugegeben .

Wenn Sie nur die „voll Worte“ zählen, dann können Sie eine der folgenden Lösungen verwenden:

SET ANSI_WARNINGS ON; 
DECLARE @Source VARCHAR(200) 
SET @Source = 'asdf_dd_adf34asdf_sdf_asdf_coco_jambo'; 

DECLARE @x XML = (SELECT @Source FOR XML PATH('')) 
SET @x = N'<root> <word>' + REPLACE(CONVERT(VARCHAR(200),@x), N'_', N'</word> <word>') + N'</word> </root>'; 

DECLARE @Parameter VARCHAR(200) = 'asdf' ; 

--Solution 1 
SELECT @x.query('count(//root/word[text()=sql:variable("@Parameter")])').value('(.)','INT') AS WordCount_Solution1; 

--Solution 2 
SELECT COUNT(*) AS WordCount_Solution2 
FROM 
(
     SELECT n.t.value('(.)','VARCHAR(200)') AS Word 
     FROM @x.nodes('root/word') AS n(t) 
) src 
WHERE src.Word = @Parameter; 

Ergebnisse:

WordCount_Solution1 
------------------- 
2 

WordCount_Solution2 
------------------- 
2 
Verwandte Themen