Häufigkeit, mit der ein bestimmtes Zeichen in einer Zeichenfolge angezeigt wird

79

Gibt es eine MS SQL Server-Funktion, die zählt, wie oft ein bestimmtes Zeichen in einer Zeichenfolge angezeigt wird?

Alter Mann
quelle
1
Versuchen Sie den folgenden ähnlichen SO- Fragenlink
Barry Kaye
Duplikat von SO Wie zählen Sie die Anzahl der Vorkommen eines bestimmten Teilstrings in einem SQL-Varchar? Das ist älter und hat mehr Antworten.
Peter

Antworten:

165

Es gibt keine direkte Funktion dafür, aber Sie können dies durch Ersetzen tun:

declare @myvar varchar(20)
set @myvar = 'Hello World'

select len(@myvar) - len(replace(@myvar,'o',''))

Grundsätzlich zeigt dies an, wie viele Zeichen entfernt wurden und wie viele Instanzen davon vorhanden waren.

Extra:

Das Obige kann erweitert werden, um das Auftreten einer Zeichenfolge mit mehreren Zeichen zu zählen, indem durch die Länge der gesuchten Zeichenfolge dividiert wird. Zum Beispiel:

declare @myvar varchar(max), @tocount varchar(20)
set @myvar = 'Hello World, Hello World'
set @tocount = 'lo'

select (len(@myvar) - len(replace(@myvar,@tocount,''))) / LEN(@tocount)
Jon Egerton
quelle
2
Vielleicht wäre es besser, DATALENGTH anstelle von LEN zu verwenden, da LEN die Größe der zugeschnittenen Zeichenfolge zurückgibt.
Rodrigocl
4
Die Verwendung von DATALENGTH erfordert Sorgfalt, da die Datengröße zum Speichern der Variablen zurückgegeben wird. Für einen Varchar ist dies in Ordnung, da die Anzahl der Bytes zum Speichern der Daten der Länge der Zeichenfolge entspricht. Nvarchar verwendet jedoch 2 Bytes für jedes Zeichen, sodass DATALENGTH die angegebene Länge verdoppeln würde. Es gibt andere Faktoren, die ebenfalls die DATALENGTH beeinflussen können. Siehe msdn
Jon Egerton
Beachten Sie, dass die Codelösung für Zeichenfolgen mit mehreren Zeichen +1 zurückgibt, wenn sich die gesuchten Zeichen am Ende der Zeichenfolge befinden. Beispiel: set @myvar = 'lo Hallo Welt, hallo Welt, lo lo' gibt 6 statt 5 zurück.
Langston
Es sind die einfachen Dinge, die meinen Tag ausmachen. Vielen Dank!
PseudoToad
20

Überprüfen Sie die Länge der Zeichenfolge, nachdem Sie die Sequenz ersetzt haben

declare @s varchar(10) = 'aabaacaa'
select len(@s) - len(replace(@s, 'a', ''))
>>6
Alex K.
quelle
sehr kluge Idee
Théophile Pace
15

Sie können dies mit replaceund tun len.

Anzahl der xZeichen zählen in str:

len(str) - len(replace(str, 'x', ''))
Guffa
quelle
7

Verwenden Sie diese Funktion ab SQL Server 2016

Select Count(value) From STRING_SPLIT('AAA AAA AAA',' ');

-- Output : 3 

Wenn diese Funktion mit der Zählfunktion verwendet wird, gibt sie an, wie viele Zeichen in einer Zeichenfolge vorhanden sind

Toprak
quelle
5

Versuch das :

declare @t nvarchar(max)
set @t='aaaa'

select len(@t)-len(replace(@t,'a',''))
Royi Namir
quelle
4

Sie können dies vollständig inline tun, indem Sie das gewünschte Zeichen durch eine leere Zeichenfolge ersetzen, die LENGTH-Funktion aufrufen und von der Länge der ursprünglichen Zeichenfolge abziehen.

SELECT 
  CustomerName, 
  LENGTH(CustomerName) -
  LENGTH(REPLACE(CustomerName, ' ', '')) AS NumberOfSpaces
FROM Customers;
Jiri Hubacek
quelle
2

Sie können dies inline tun, müssen jedoch mit Leerzeichen in den Spaltendaten vorsichtig sein. Verwenden Sie besser datalength ()

SELECT 
  ColName, 
  DATALENGTH(ColName) -
  DATALENGTH(REPLACE(Col, 'A', '')) AS NumberOfLetterA
FROM ColName;

-OR- Ersetzen Sie durch 2 Zeichen

SELECT 
  ColName, 
  -LEN(ColName)
  +LEN(REPLACE(Col, 'A', '><')) AS NumberOfLetterA
FROM ColName;
Sandro Herrera
quelle
1

Funktion für SQL Server:

CREATE function NTSGetCinC(@Cadena nvarchar(4000), @UnChar nvarchar(100)) 
Returns int 

 as  

 begin 

 declare @t1 int 

 declare @t2 int 

 declare @t3 int 

 set @t1 = len(@Cadena) 

 set @t2 = len(replace(@Cadena,@UnChar,'')) 

 set @t3 = len(@UnChar) 


 return (@t1 - @t2)  / @t3 

 end 

Code für Visual Basic und andere:

Public Function NTSCuentaChars(Texto As String, CharAContar As String) As Long

NTSCuentaChars = (Len(Texto) - Len(Replace(Texto, CharAContar, ""))) / Len(CharAContar)

End Function
R. Alonso
quelle
1

BESTE

DECLARE @yourSpecialMark = '/';
select len(@yourString) - len(replace(@yourString,@yourSpecialMark,''))

Es wird gezählt, wie oft die Sondermarke '/' vorkommt.

Piotr Neu
quelle
0

Verwenden Sie diesen Code, es funktioniert einwandfrei. Ich habe eine SQL-Funktion erstellt, die zwei Parameter akzeptiert. Der erste Parameter ist die lange Zeichenfolge, nach der gesucht werden soll, und sie kann eine Zeichenfolgenlänge von bis zu 1500 Zeichen akzeptieren (natürlich können Sie sie erweitern oder sogar in einen Textdatentyp ändern ). Und der zweite Parameter ist der Teilstring, mit dem wir die Anzahl seiner Vorkommen berechnen möchten (seine Länge beträgt bis zu 200 Zeichen, natürlich können Sie ihn nach Ihren Wünschen ändern). und die Ausgabe ist eine ganze Zahl, repräsentieren die Anzahl der Frequenzen ..... genießen Sie es.


CREATE FUNCTION [dbo].[GetSubstringCount]
(
  @InputString nvarchar(1500),
  @SubString NVARCHAR(200)
)
RETURNS int
AS
BEGIN 
        declare @K int , @StrLen int , @Count int , @SubStrLen int 
        set @SubStrLen = (select len(@SubString))
        set @Count = 0
        Set @k = 1
        set @StrLen =(select len(@InputString))
    While @K <= @StrLen
        Begin
            if ((select substring(@InputString, @K, @SubStrLen)) = @SubString)
                begin
                    if ((select CHARINDEX(@SubString ,@InputString)) > 0)
                        begin
                        set @Count = @Count +1
                        end
                end
                                Set @K=@k+1
        end
        return @Count
end
Eines Tages
quelle