Ein Feld in der Tabelle enthalten, das zwischen 1, 2 oder 3 Ziffern enthalten kann, die durch Kommas getrennt sind. Also wie folgt Beispiel unten:Datensätze erhalten, deren Feld bestimmte Ziffern enthält
ID | digitField
1 | 4, 55
2 | 1 ,70,33
3 | 8
4 | 9,22,43
5 | 1,833,3
6 | 77,9
7 | 33
8 | 2,3335
9 | 6, 33
Jetzt mit einer Ziffer möchte ich suchen und erhalten ID der Datensätze, die es enthält. Was ist der beste Ansatz, um nach diesen Datensätzen zu suchen? jedes Auftreten von Ziffer 33. In diesem Fall
Zum Beispiel für suche ich würde Ich mag diese Datensätze erhalten, basierend auf obiges Beispiel:
2 | 1,70,33
7 | 33
9 | 6, 33
Hat folgende Abfrage wäre gut genug und nicht riskant zu bekommen falsche Ergebnisse, oder könnten Sie bessere Lösung geben ?:
SELECT ID FROM table WHERE CONTAINS(digitField, '33');
Diese Abfrage ist sehr wichtig als Ergebnis ids Shop-Produkte löschen wird, so dass ich zu falschen Ergebnissen vermeiden möchten. Beachten Sie, dass Datensätze, die 3, 833 oder 3335 enthalten, nicht übereinstimmen können, wenn wir nach 33 suchen. Beachten Sie auch, dass einige Leerzeichen innerhalb dieses Felds vorhanden sein können (das ist bereits implementiert und kann nicht geändert werden)
Auf der Suche nach der besten Lösung.
Zusätzliche Frage richtig Abfrage innerhalb Zeichenfolge close up:
Using cnn As New SqlConnection(strcon)
cnn.Open()
'--Just in case remove all spaces from string in field Materials before
Using dad As New SqlDataAdapter(";WITH yourtable as (SELECT ID, REPLACE(digitField, ' ', '') digitfield FROM tempDigit)
SELECT * FROM YourTable WHERE digitField = @matId
OR digitField LIKE @matId+',%'
OR digitField LIKE '%,'[email protected]
OR digitField LIKE '%,'[email protected]+',%'", cnn)
dad.SelectCommand.Parameters.Add(New SqlParameter("@matId", matId.ToString))
dad.Fill(dt)
If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then
result = dt
End If
End Using
cnn.Close()
End Using
Haben Sie einen Volltextindex auf th Die Spalte 'digitField'? Andernfalls können Sie ['CONTAINS'] nicht verwenden (http://msdn.microsoft.com/en-us/library/ms187787.aspx) – NickyvV
Falls Sie 'ID 3' als' 8333' haben, müssen Sie diese ebenfalls zurückgeben im Ergebnis? – Arulkumar
Nein - nur genaue Nummer in diesem Fall 33 also nicht 3, aber wenn ich 3 wäre, dann 33 kann nicht zurückgegeben werden –