Кількість випадків, коли певний символ з’являється у рядку


80

Чи існує функція MS SQL Server, яка підраховує кількість випадків появи певного символу в рядку?



1
Спробуйте наступне подібне посилання на
Barry Kaye

Дублікат SO Як підрахувати кількість повторень певного підрядка в SQL-варчарі? який старший і має більше відповідей.
Пітер

Відповіді:


167

Для цього немає прямої функції, але ви можете зробити це, замінивши:

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)

2
Можливо, краще використовувати DATALENGTH замість LEN, оскільки LEN повертає розмір обрізаного рядка.
rodrigocl

4
Використання DATALENGTH потребує обережності, оскільки воно повертає розмір даних, що використовуються для зберігання змінної. Для varchar це нормально, оскільки кількість байтів для зберігання даних дорівнює довжині рядка. Однак nvarchar використовує 2 байти для кожного символу, тому DATALENGTH подвоїть довжину, про яку повідомляється. Є й інші фактори, які також можуть вплинути на ДАТАЛЕНГТ. Див. Msdn
Джон Егертон,

Зауважте, що рішення коду для багаторядкових рядків повертає +1, коли шукані символи знаходяться в кінці рядка. Наприклад: set @myvar = 'lo Hello World, Hello World, lo lo' повертає 6 замість 5.
Ленгстон

Його прості речі роблять мій день. Дякую!
PseudoToad

20

Подивіться на довжину рядка після заміни послідовності

declare @s varchar(10) = 'aabaacaa'
select len(@s) - len(replace(@s, 'a', ''))
>>6

дуже розумна ідея
Теофіл Пейс

15

Ви можете зробити це, використовуючи replaceта len.

Підрахувати кількість xсимволів у str:

len(str) - len(replace(str, 'x', ''))

7

Використовуйте цю функцію, починаючи з SQL SERVER 2016

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

-- Output : 3 

Коли ця функція використовується з функцією count, вона дає вам скільки символів існує в рядку



4

Ви можете зробити це повністю в рядку, замінивши потрібний символ на порожній рядок, викликаючи функцію LENGTH і віднімаючи довжину вихідного рядка.

SELECT 
  CustomerName, 
  LENGTH(CustomerName) -
  LENGTH(REPLACE(CustomerName, ' ', '')) AS NumberOfSpaces
FROM Customers;

2

Ви можете зробити це вбудовано, але ви повинні бути обережними з пробілами в даних стовпця. Краще використовувати 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;

1

функція для сервера 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

1

НАЙКРАЩИЙ

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

Буде рахуватися, скільки разів зустрічається спеціальна позначка '/'


0

Використовуйте цей код, він працює ідеально. Я створив функцію 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.