Gibt es eine MS SQL Server-Funktion, die zählt, wie oft ein bestimmtes Zeichen in einer Zeichenfolge angezeigt wird?
Gibt es eine MS SQL Server-Funktion, die zählt, wie oft ein bestimmtes Zeichen in einer Zeichenfolge angezeigt wird?
Antworten:
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)
Ü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
Versuch das :
declare @t nvarchar(max)
set @t='aaaa'
select len(@t)-len(replace(@t,'a',''))
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;
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;
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
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