Wie soll ich das Wort "asdf" in der Variablen aaa mit dem Wert "asdf_dd_adf34asdf_sdf" zählen können?Rechtes Wort von einer bestimmten Variablen zählen
DECLARE @aaa varchar;
SET @aaa = 'asdf_dd_adf34asdf_sdf';
Wie soll ich das Wort "asdf" in der Variablen aaa mit dem Wert "asdf_dd_adf34asdf_sdf" zählen können?Rechtes Wort von einer bestimmten Variablen zählen
DECLARE @aaa varchar;
SET @aaa = 'asdf_dd_adf34asdf_sdf';
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')
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
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. –