Wie kann ich überprüfen, ob eine Zahl in einer kommagetrennten Liste in einer varchar-Spalte enthalten ist?

8

Ich habe eine Tabelle mit einer varchar Spalte categoryIds . Es enthält einige IDs, die durch Kommata getrennt sind, zum Beispiel:

%Vor%

Ich möchte eine select-Anweisung ausführen und prüfen, ob in dieser Spalte ein int existiert. Etwas wie das:

%Vor%

Ich weiß, dass dies in MySQL möglich ist, indem dies , aber kann es auch in SQL Server gemacht werden?

Ich habe versucht, das int zu einem char zu konvertieren, das die folgende Anweisung ausführt:

%Vor%

Aber es sieht nicht so aus, als ob es "out of the box" Unterstützung für kommagetrennte Listen gibt, da es nichts zurückgibt.

    
Schileru 22.10.2015, 10:24
quelle

6 Antworten

9

Sie sollten diese Tabelle wirklich so umgestalten, dass diese Werte von Kommas getrennt in einzelne Zeilen aufgeteilt werden. Wenn dies jedoch nicht möglich ist, müssen Sie stattdessen einen String-Vergleich durchführen:

%Vor%     
DavidG 22.10.2015, 10:34
quelle
3
___ qstnhdr ___ Wie kann ich überprüfen, ob eine Zahl in einer kommagetrennten Liste in einer varchar-Spalte enthalten ist? ___ answer33278978 ___

Sie sollten diese Tabelle wirklich so umgestalten, dass diese Werte von Kommas getrennt in einzelne Zeilen aufgeteilt werden. Wenn dies jedoch nicht möglich ist, müssen Sie stattdessen einen String-Vergleich durchführen:

%Vor%     
___ antwort43999566 ___
%Vor%

Hier @stringId ist Ihr zu durchsuchender Text. Auf diese Weise können Sie unnötige mehrfache Bedingungen vermeiden

Mit freundlichen Grüßen, Raghu.M.

    
___ qstntxt ___

Ich habe eine Tabelle mit einer %code% Spalte %code% . Es enthält einige IDs, die durch Kommata getrennt sind, zum Beispiel:

%Vor%

Ich möchte eine select-Anweisung ausführen und prüfen, ob in dieser Spalte ein int existiert. Etwas wie das:

%Vor%

Ich weiß, dass dies in MySQL möglich ist, indem dies , aber kann es auch in SQL Server gemacht werden?

Ich habe versucht, das int zu einem char zu konvertieren, das die folgende Anweisung ausführt:

%Vor%

Aber es sieht nicht so aus, als ob es "out of the box" Unterstützung für kommagetrennte Listen gibt, da es nichts zurückgibt.

    
___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage ausschließlich auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ answer49320196 ___
  

SELECT * FROM %code% WHERE (user_tags regexp '[[: & lt;:]] 10 [[: & gt ;:]]'   oder user_tags regexp '[[: & lt;:]] 11 [[: & gt;:]]])

    
___ answer39570971 ___

Ich bin mir nicht sicher, ob das schneller oder langsamer wäre als der Vorschlag von DavidG, aber um die gleichen Übereinstimmungen mit nur einer Prüfung zu erhalten, können Sie Folgendes tun:

%Vor%     
___ answer41346376 ___

Verwenden Sie %code% mysql-Funktion

Syntax

%Vor%

Beispiel

%Vor%     
___ answer33279108 ___

Sie könnten dynamisches SQL wie folgt verwenden:

%Vor%     
___ tag123sqlserver ___ Microsoft SQL Server ist ein relationales Datenbankverwaltungssystem (RDBMS). Verwenden Sie dieses Tag für alle SQL Server-Editionen, einschließlich Compact, Express, Azure, Fast-Track, APS (früher PDW) und Azure SQL DW. Verwenden Sie dieses Tag nicht für andere Arten von DBMS (MySQL, PostgreSQL, Oracle usw.). Verwenden Sie dieses Tag nicht für Probleme bei der Software- und mobilen Entwicklung, es sei denn, es steht in direktem Zusammenhang mit der Datenbank. ___
Raghurocks 16.05.2017 10:57
quelle
0

Sie könnten dynamisches SQL wie folgt verwenden:

%Vor%     
Peter Elzinga 22.10.2015 10:41
quelle
0

Ich bin mir nicht sicher, ob das schneller oder langsamer wäre als der Vorschlag von DavidG, aber um die gleichen Übereinstimmungen mit nur einer Prüfung zu erhalten, können Sie Folgendes tun:

%Vor%     
Mike Beaton 19.09.2016 10:29
quelle
0
  

SELECT * FROM user_master WHERE (user_tags regexp '[[: & lt;:]] 10 [[: & gt ;:]]'   oder user_tags regexp '[[: & lt;:]] 11 [[: & gt;:]]])

    
Chirag Pipariya 16.03.2018 11:55
quelle
-4

Verwenden Sie FIND_IN_SET() mysql-Funktion

Syntax

%Vor%

Beispiel

%Vor%     
Sujal Patel 27.12.2016 13:47
quelle

Tags und Links