Ich habe eine SQL-Spalte, die aus 100 'Y' oder 'N' Zeichen besteht. Zum Beispiel:
YYNYNYYNNNYYNY ...
Was ist der einfachste Weg, um die Anzahl aller Y-Symbole in jeder Zeile zu ermitteln?.
wenn ms sql
SELECT LEN(REPLACE(myColumn, 'N', '')) FROM ...
Dieses Snippet funktioniert in der spezifischen Situation, in der Sie einen Boolean haben: Es antwortet "Wie viele Nicht-Ns gibt es?".
SELECT LEN(REPLACE(col, 'N', ''))
Wenn Sie in einer anderen Situation tatsächlich versucht haben, das Vorkommen eines bestimmten Zeichens (zum Beispiel 'Y') in einer bestimmten Zeichenfolge zu zählen, verwenden Sie Folgendes:
SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))
Dies gab mir jedes Mal genaue Ergebnisse ...
Dies ist in meinem Streifenfeld ..... Gelb, Gelb, Gelb, Gelb, Gelb, Gelb, Schwarz, Gelb, Gelb, Rot, Gelb, Gelb, Gelb, Schwarz
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]
Vielleicht so etwas ...
SELECT
LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs
FROM
SomeTable
Mit der folgenden Lösungshilfe können Sie herausfinden, welche Zeichenanzahl in einer Zeichenfolge mit einer Einschränkung vorhanden ist:
1) Verwenden von SELECT LEN (REPLACE (myColumn, 'N', '')), aber Einschränkung und falsche Ausgabe unter folgenden Bedingungen:
SELECT LEN (REPLACE ('YYNYNYYNNNYYNY', 'N', ''));
- 8 - RichtigSELECT LEN (REPLACE ('123a123a12', 'a', ''));
- 8 - FalschSELECT LEN (REPLACE ('123a123a12', '1', ''));
- 7 - Falsch
2) Versuchen Sie es mit der folgenden Lösung für die korrekte Ausgabe:
wähle dbo.vj_count_char_from_string ('123a123a12', '2');
- 2 - Richtigselect dbo.vj_count_char_from_string ('123a123a12', 'a');
- 2 - Richtig
-- ================================================
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
Der einfachste Weg ist die Verwendung der Oracle-Funktion:
SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME
Wenn Sie das Zeichen in einer Zeichenfolge mit mehr als zwei Arten von Zeichen zählen müssen, können Sie anstelle von 'n' -
einen Operator oder regex der Zeichen verwenden, um das von Ihnen benötigte Zeichen zu akzeptieren.
SELECT LEN(REPLACE(col, 'N', ''))
Sie können dies auch versuchen
-- 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
Ausgabe:
Folgendes habe ich in Oracle SQL verwendet, um festzustellen, ob jemand eine korrekt formatierte Telefonnummer übergeben hat:
WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','') IS NULL AND
LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0','')) = 2
Der erste Teil prüft, ob die Telefonnummer nur Zahlen und den Bindestrich enthält, und der zweite Teil prüft, ob die Telefonnummer nur zwei Bindestriche enthält.
versuche dies
declare @v varchar(250) = 'test.a,1 ;hheuw-20;'
-- LF ;
select len(replace(@v,';','11'))-len(@v)
um zum Beispiel die Anzahl der Instanzen des Zeichens (a) in der SQL-Spalte zu berechnen -> name ist der Spaltenname '' (und in Doblequote ist leer, ich ersetze a durch nocharecter @ '')
Wählen Sie len (Name) - len (Ersetzen (Name, 'a', '') aus TESTING
wähle len ('YYNYNYYNNNYYNY') - len (ersetze ('YYNYNYYNNNYYNY', 'y', '')
Die zweite Antwort von nickf ist sehr schlau. Es funktioniert jedoch nur für eine Zeichenlänge der Ziel-Unterzeichenfolge von 1 und ignoriert Leerzeichen. Insbesondere enthielten meine Daten zwei führende Leerzeichen, die von SQL hilfreich entfernt wurden (ich wusste das nicht), wenn alle Zeichen auf der rechten Seite entfernt wurden. Was das bedeutete
" John Smith"
erzeugte 12 mit der Nickf-Methode, während:
"Joe Bloggs, John Smith"
10 und generiert
"Joe Bloggs, John Smith, John Smith"
20 generiert.
Ich habe die Lösung daher leicht folgendermaßen geändert, was für mich funktioniert:
Select (len(replace(Sales_Reps,' ',''))- len(replace((replace(Sales_Reps, ' ','')),'JohnSmith','')))/9 as Count_JS
Ich bin mir sicher, dass jemand einen besseren Weg finden kann!
Dies gibt die Anzahl der Vorkommen von N zurück
select ColumnName, LEN(ColumnName)- LEN(REPLACE(ColumnName, 'N', '')) from Table
Wenn Sie die Anzahl der Instanzen von Zeichenfolgen mit mehr als einem einzelnen Zeichen zählen möchten, können Sie entweder die vorherige Lösung mit Regex verwenden oder diese Lösung verwendet STRING_SPLIT, das meiner Meinung nach in SQL Server 2016 eingeführt wurde. Außerdem benötigen Sie Kompatibilität Stufe 130 und höher.
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
Versuche dies. Es bestimmt das Nein. von Einzelzeichen-Vorkommen sowie die Vorketten-Vorkommen in der Hauptzeichenfolge.
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);