100 'Y' veya 'N' karakterli bir sql sütunum var. Örneğin:
YYNYNYNNYYNY ...
Her satırdaki tüm 'Y' sembollerinin sayısını almanın en kolay yolu nedir?
100 'Y' veya 'N' karakterli bir sql sütunum var. Örneğin:
YYNYNYNNYYNY ...
Her satırdaki tüm 'Y' sembollerinin sayısını almanın en kolay yolu nedir?
Yanıtlar:
SQL Server'da:
SELECT LEN(REPLACE(myColumn, 'N', ''))
FROM ...
Bu pasaj, bir boole değerinizin olduğu özel durumda çalışır: "Kaç tane N olmayan var?" Yanıtını verir.
SELECT LEN(REPLACE(col, 'N', ''))
Farklı bir durumda, herhangi bir dizede belirli bir karakterin (örneğin 'Y') oluşumlarını gerçekten saymaya çalışıyorsanız, şunu kullanın:
SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))
Bu bana her seferinde doğru sonuçlar verdi ...
Bu benim Stripes alanımda ...
Sarı, Sarı, Sarı, Sarı, Sarı, Sarı, Siyah, Sarı, Sarı, Kırmızı, Sarı, Sarı, Sarı, Siyah
SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red')
FROM t_Contacts
DECLARE @StringToFind VARCHAR(100) = "Text To Count"
SELECT (LEN([Field To Search]) - LEN(REPLACE([Field To Search],@StringToFind,'')))/COALESCE(NULLIF(LEN(@StringToFind), 0), 1) --protect division from zero
FROM [Table To Search]
LEN(@StringToFind)
.
@StringToFind
, asla boş veya boş olmayacaktır.
Field To Search
sıfıra bölündüğü için sıfıra Len(' ')
bölünür.
Belki bunun gibi bir şey ...
SELECT
LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs
FROM
SomeTable
En kolay yol, Oracle işlevini kullanmaktır:
SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME
Bu, N'nin oluşum sayısını döndürecektir
select ColumnName, LEN(ColumnName)- LEN(REPLACE(ColumnName, 'N', ''))
from Table
bunu dene
declare @v varchar(250) = 'test.a,1 ;hheuw-20;'
-- LF ;
select len(replace(@v,';','11'))-len(@v)
Bunu dene. Hayır belirler. tek karakter oluşumlarının yanı sıra ana dizedeki alt dize oluşumlarının.
SELECT COUNT(DECODE(SUBSTR(UPPER(:main_string),rownum,LENGTH(:search_char)),UPPER(:search_char),1)) search_char_count
FROM DUAL
connect by rownum <= length(:main_string);
Birden fazla karakter içeren dizelerin örnek sayısını saymak istiyorsanız, ya önceki çözümü regex ile kullanabilirsiniz ya da bu çözüm, SQL Server 2016'da tanıtıldığına inandığım STRING_SPLIT'i kullanır. Ayrıca uyumluluğa ihtiyacınız olacak. seviye 130 ve üstü.
ALTER DATABASE [database_name] SET COMPATIBILITY_LEVEL = 130
.
--some data
DECLARE @table TABLE (col varchar(500))
INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)'
INSERT INTO @table SELECT 'whaCHAR(10)teverwhateverCHAR(10)'
INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)~'
--string to find
DECLARE @string varchar(100) = 'CHAR(10)'
--select
SELECT
col
, (SELECT COUNT(*) - 1 FROM STRING_SPLIT (REPLACE(REPLACE(col, '~', ''), 'CHAR(10)', '~'), '~')) AS 'NumberOfBreaks'
FROM @table
Nickf'in verdiği ikinci cevap çok akıllıca. Ancak, yalnızca 1 hedef alt dizesinin bir karakter uzunluğu için çalışır ve boşlukları yok sayar. Spesifik olarak, verilerimde önde gelen iki boşluk vardı ve sağ taraftaki tüm karakterler silindiğinde SQL'in yardımcı bir şekilde kaldırdığı (bunu bilmiyordum). Bunun anlamı
" John Smith"
Nickf'in yöntemini kullanarak 12 üretti, oysa:
"Joe Bloggs, John Smith"
10 oluşturuldu ve
"Joe Bloggs, John Smith, John Smith"
20 oluşturuldu.
Bu nedenle çözümü, benim için çalışan aşağıdaki şekilde biraz değiştirdim:
Select (len(replace(Sales_Reps,' ',''))- len(replace((replace(Sales_Reps, ' ','')),'JohnSmith','')))/9 as Count_JS
Eminim birisi bunu yapmanın daha iyi bir yolunu düşünebilir!
Bunu da deneyebilirsiniz
-- DECLARE field because your table type may be text
DECLARE @mmRxClaim nvarchar(MAX)
-- Getting Value from table
SELECT top (1) @mmRxClaim = mRxClaim FROM RxClaim WHERE rxclaimid_PK =362
-- Main String Value
SELECT @mmRxClaim AS MainStringValue
-- Count Multiple Character for this number of space will be number of character
SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'GS', ' ')) AS CountMultipleCharacter
-- Count Single Character for this number of space will be one
SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'G', '')) AS CountSingleCharacter
Çıktı:
Aşağıdaki çözüm, sınırlama ile bir dizede bulunan karakter olmadığını bulmaya yardımcı olur:
1) UZUNLUK SEÇİN (DEĞİŞTİR (myColumn, 'N', '')), ancak aşağıdaki koşulda sınırlama ve yanlış çıktı kullanma:
UZUNLUK SEÇİN (DEĞİŞTİR ('YYNYYNNYYNY', 'N', ''));
--8 --DoğruUZUNLUK SEÇİN (DEĞİŞTİR ('123a123a12', 'a', ''));
--8 - YanlışUZUNLUK SEÇİN (DEĞİŞTİR ('123a123a12', '1', ''));
--7 - Yanlış
2) Doğru çıktı için aşağıdaki çözümü deneyin:
dbo.vj_count_char_from_string ('123a123a12', '2') seçin;
--2 --Doğrudbo.vj_count_char_from_string ('123a123a12', 'a') seçin;
--2 --Doğru
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: VIKRAM JAIN
-- Create date: 20 MARCH 2019
-- Description: Count char from string
-- =============================================
create FUNCTION vj_count_char_from_string
(
@string nvarchar(500),
@find_char char(1)
)
RETURNS integer
AS
BEGIN
-- Declare the return variable here
DECLARE @total_char int; DECLARE @position INT;
SET @total_char=0; set @position = 1;
-- Add the T-SQL statements to compute the return value here
if LEN(@string)>0
BEGIN
WHILE @position <= LEN(@string) -1
BEGIN
if SUBSTRING(@string, @position, 1) = @find_char
BEGIN
SET @total_char+= 1;
END
SET @position+= 1;
END
END;
-- Return the result of the function
RETURN @total_char;
END
GO
Eğer bir karakter dizisinde 2'den fazla karakter içeren bir karakter saymanız gerekiyorsa, 'n' -
bazı operatörlerin yerine kullanabilirsiniz veya karakterlerin normal ifadeleri ihtiyacınız olan karakterleri kabul eder.
SELECT LEN(REPLACE(col, 'N', ''))
Oracle SQL'de birinin doğru biçimlendirilmiş bir telefon numarasını geçirip geçirmediğini görmek için kullandığım şey:
WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','') IS NULL AND
LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0','')) = 2
İlk bölüm, telefon numarasında yalnızca numara olup olmadığını ve kısa çizginin olup olmadığını kontrol eder ve ikinci bölüm, telefon numarasında yalnızca iki kısa çizgi olup olmadığını kontrol eder.
örneğin, SQL Sütunundaki (a) karakterinin sayım örneklerini hesaplamak için -> isim sütun adıdır '' (ve doblequote'da boşken a'yı nocharecter @ '' ile değiştiriyorum)
TESTING'den len (ad) - len ((ad, 'a', '') yerine) seçin
len seçin ('YYNYNYYNNYYNY') - len (('YYNYYNNNYYNY', 'y', ''))