Wie finde ich alle Positionen patindex
in einer Tabelle oder Variablen?
declare @name nvarchar(max)
set @name ='ali reza dar yek shabe barani ba yek '
+ 'dokhtare khoshkel be disco raft va ali baraye'
+ ' 1 saat anja bud va sepas... ali...'
select patindex('%ali%',@name) as pos
Dies kehrt zurück, 1
aber ich möchte alle Ergebnisse, z.
pos
===
1
74
113
sql-server
sql-server-2005
string-searching
coditori
quelle
quelle
1
in einer Zeichenfolge suchen , die nur Nullen und Einsen enthält. Ich habe Ihre Lösung und @ aaron-bertrand verwendet, aber ich habe die gleichen Ergebnisse und die gleiche Leistung erzielt. Welche Lösung wäre es besser?Ich denke, dies ist etwas effizienter als die von Ihnen gewählte Schleifenmethode ( einige Hinweise hier ) und definitiv effizienter als der rekursive CTE:
Beispielnutzung:
Ergebnisse:
Wenn Ihre Zeichenfolgen länger als 2 KB sind, verwenden Sie sys.all_columns anstelle von sys.all_objects. Wenn länger als 8 KB, fügen Sie einen Cross-Join hinzu.
quelle
- Rekursiver CTE
quelle
Ich liebe Aaron Bertrands Antwort. Obwohl ich es nicht ganz verstehe, sieht es wirklich elegant aus.
In der Vergangenheit bin ich bei der Verwendung auf Probleme mit Berechtigungen gestoßen
sys.objects
. In Kombination mit der Notwendigkeit, den Code zu beheben, habe ich eine Variation von Aarons Code entwickelt und diese unten hinzugefügt.Dies ist meine Vorgehensweise:
Der
MAX(posid)
Wert ist auch die Anzahl der gefundenen Übereinstimmungen.quelle
Dies ist ein einfacher Code, der auf Aarons Antwort basiert :
CODE:
ERGEBNIS
quelle
sys.all_columns
(Sie können jede Quelle verwenden, solange sie die Länge Ihrer längsten Zeichenfolge abdeckt), und ich habe sie erneut getestet und sehe nicht, wo ich das letzte 'X' vermisse. .Tut mir leid, Leute, die so spät vorbeischauen, aber ich möchte es den Leuten leichter machen, die dies erweitern möchten. Ich habe mir jede dieser Implementierungen angesehen, diejenige genommen, die mir am besten erschien (Aaron Bertrand), sie vereinfacht und los geht's, Sie haben die "Vorlage". Benutze es weise.
Nur als Referenz - Sie können daraus andere Verhaltensweisen ableiten, z. B. PATINDEX () erweitern:
quelle
quelle