it-swarm.com.de

Wie werden Zeicheninstanzen in der SQL-Spalte gezählt?

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?.

87
cindi

wenn ms sql

SELECT LEN(REPLACE(myColumn, 'N', '')) FROM ...
79
David Hedlund

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', ''))
259
nickf

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

  • 11 Gelb
  • 2 schwarz
  • 1 rot
SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red') 
  FROM t_Contacts
12
Ron Sell
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]
12
Aaron Dake

Vielleicht so etwas ...

SELECT
    LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs
FROM
    SomeTable
2
Jason Punyon

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 - Richtig

SELECT LEN (REPLACE ('123a123a12', 'a', ''));
- 8 - Falsch

SELECT LEN (REPLACE ('123a123a12', '1', ''));
- 7 - Falsch

2) Versuchen Sie es mit der folgenden Lösung für die korrekte Ausgabe:

  • Erstellen Sie eine Funktion und ändern Sie sie nach Bedarf.
  • Und rufen Sie die Funktion wie unten beschrieben auf

wähle dbo.vj_count_char_from_string ('123a123a12', '2');
- 2 - Richtig

select 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
1
jainvikram444

Der einfachste Weg ist die Verwendung der Oracle-Funktion:

SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME
1
Mayuresh Bhabal

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', ''))
1
ut or

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:

 enter image description here

0
atik sarker

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.

0
TonyK

versuche dies

declare @v varchar(250) = 'test.a,1  ;hheuw-20;'
-- LF   ;
select len(replace(@v,';','11'))-len(@v)
0
user5546076

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', '')

0

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!

0
Statsanalyst

Dies gibt die Anzahl der Vorkommen von N zurück

select ColumnName, LEN(ColumnName)- LEN(REPLACE(ColumnName, 'N', '')) from Table

0
Faisal Shahzad

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
0
user3469285

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);
0
Himanshu Tiwari