Чи існує функція MS SQL Server, яка підраховує кількість випадків появи певного символу в рядку?
Чи існує функція MS SQL Server, яка підраховує кількість випадків появи певного символу в рядку?
Відповіді:
Для цього немає прямої функції, але ви можете зробити це, замінивши:
declare @myvar varchar(20)
set @myvar = 'Hello World'
select len(@myvar) - len(replace(@myvar,'o',''))
В основному це говорить про те, скільки символів було видалено, а отже, скільки таких випадків було.
Додатково:
Вищезазначене можна розширити для підрахунку випадків багаторядкового рядка шляхом ділення на довжину рядка, який шукається. Наприклад:
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)
Подивіться на довжину рядка після заміни послідовності
declare @s varchar(10) = 'aabaacaa'
select len(@s) - len(replace(@s, 'a', ''))
>>6
Ви можете зробити це повністю в рядку, замінивши потрібний символ на порожній рядок, викликаючи функцію LENGTH і віднімаючи довжину вихідного рядка.
SELECT
CustomerName,
LENGTH(CustomerName) -
LENGTH(REPLACE(CustomerName, ' ', '')) AS NumberOfSpaces
FROM Customers;
Ви можете зробити це вбудовано, але ви повинні бути обережними з пробілами в даних стовпця. Краще використовувати datalength ()
SELECT
ColName,
DATALENGTH(ColName) -
DATALENGTH(REPLACE(Col, 'A', '')) AS NumberOfLetterA
FROM ColName;
-АБО - Замініть 2 символи
SELECT
ColName,
-LEN(ColName)
+LEN(REPLACE(Col, 'A', '><')) AS NumberOfLetterA
FROM ColName;
функція для сервера SQL:
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
Код для visual basic та інші:
Public Function NTSCuentaChars(Texto As String, CharAContar As String) As Long
NTSCuentaChars = (Len(Texto) - Len(Replace(Texto, CharAContar, ""))) / Len(CharAContar)
End Function
НАЙКРАЩИЙ
DECLARE @yourSpecialMark = '/';
select len(@yourString) - len(replace(@yourString,@yourSpecialMark,''))
Буде рахуватися, скільки разів зустрічається спеціальна позначка '/'
Використовуйте цей код, він працює ідеально. Я створив функцію sql, яка приймає два параметри, перший параметр - це довгий рядок, який ми хочемо шукати в ньому, і він може приймати довжину рядка до 1500 символів (звичайно, ви можете розширити його або навіть змінити на текстовий тип даних ). А другий параметр - це підрядок, який ми хочемо обчислити за кількістю його відвідування (його довжина до 200 символів, звичайно, ви можете змінити його на потрібну вам). а на виході ціле число, представляють число частоти ..... насолоджуйтесь.
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