Als ich heute eine Seite schrieb, war ich auch sehr deprimiert. Es gab Datensätze in der Tabelle, aber ich konnte sie nicht in ASP finden. Es stellte sich heraus, dass dies an den unterschiedlichen Platzhalterzeichen in den Abfrageanweisungen von Access und SQL lag .
Vergleich von Platzhalterzeichen in ACCESS und Platzhalterzeichen in SQL SERVER
=============================================== =
Die Platzhalterzeichen für die ACCESS-Bibliothek sind:
*entspricht einer beliebigen Anzahl von Zeichen
?entspricht jedem Einzelbuchstabenzeichen
Platzhalterzeichen in SQL Server sind:
% entspricht einer beliebigen Anzahl von Zeichen
_ entspricht einem einzelnen Zeichen
Text
Als ich heute eine Seite schrieb, war ich auch sehr deprimiert. Es gab Datensätze in der Tabelle, aber ich konnte sie nicht in ASP finden. Die theoretische SQL-Anweisung lautet wie folgt.
Wählen Sie * FROM t_food aus, wobei t_food.name wie „*apple*“ lautet.
Bei der Suche auf GOOGLE habe ich herausgefunden, dass die Fuzzy-Abfrage in ASP so geschrieben sein sollte:
Wählen Sie * FROM t_food aus, wobei t_food.name wie „%%apple%%“ lautet.
Es muss % sein, und es müssen zwei sein. Bitte achten Sie darauf.
++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++
Problem mit Platzhaltern für SQL-Abfrageanweisungen
Bei der Verwendung von SQL-Anweisungen zur Abfrage von Daten in Access wird für die Abfrage das Platzhalterzeichen * verwendet. Die Aussage lautet wie folgt:
Wählen Sie „*“ aus „Normal“, wobei der Buchname „*h*“ lautet.
Habe es ohne Probleme in der SQL-Ansicht von Access versucht, alles funktioniert einwandfrei. Also habe ich die SQL-Anweisung in das C#-Programm geschrieben, aber sobald die Abfrageanweisung erreicht wurde, trat ein Fehler auf. Also habe ich nach der Access-Hilfedatei gesucht und folgende Hilfe gefunden:
////////////////////////////////////////////////////////////////////////// /// //////////
Vergleicht einen Zeichenfolgenausdruck mit einem Muster in einem SQL-Ausdruck.
Grammatik
ausdrucksähnliches Muster
Die Syntax des Like-Operators besteht aus den folgenden Teilen:
Teilbeschreibung
Ausdruck Der in der Where-Klausel verwendete SQL-Ausdruck.
Das String-Literal-Muster wird mit dem Ausdruck verglichen.
veranschaulichen
Mit dem Like-Operator können Sie Feldwerte finden, die einem angegebenen Muster entsprechen. Für Muster können Sie einen vollständigen Wert angeben (z. B. Like Smith) oder Platzhalter verwenden, um einen Wertebereich zu finden (z. B. Like Sm*).
In Ausdrücken können Sie den Like-Operator verwenden, um Feldwerte mit Zeichenfolgen zu vergleichen. Wenn Sie beispielsweise Like C* in einer SQL-Abfrage eingeben, gibt die Abfrage alle Feldwerte zurück, die mit dem Buchstaben C beginnen. In einer Parameterabfrage können Sie den Benutzer auffordern, ein Muster einzugeben, nach dem gesucht werden soll.
Das folgende Beispiel gibt Daten zurück, die mit dem Buchstaben P beginnen und von einem beliebigen Buchstaben von A bis F und drei Zahlen gefolgt werden:
Wie P[AF]###
Die folgende Tabelle zeigt, wie Sie verschiedene Ausdrucksmuster mit „Gefällt mir“ testen.
Übereinstimmungstyp
Mustervergleich
(Gibt True zurück) Keine Übereinstimmung
(Rückgabe falsch)
Mehrere Zeichen a*a aa, aBa, aBBBa aBC
*ab* abc, AABB, Xab aZb, bac
Sonderzeichen a
aa*a aaa
Mehrere Zeichen ab* abcdefg, abc cab, aab
Einzelzeichen a?a aaa, a3a, aBa aBBBa
Einzelne Zahlen a#a a0a, a1a, a2a aaa, a10a
Zeichenbereich [az] f, p, j 2, &
Außerhalb des Bereichs [!az] 9, &, % b, a
Nicht numerische Werte [!0-9] A, a, &, ~ 0, 1, 9
Zusammengesetzter Wert a[!bm]# An9, az0, a99 abc, aj0
Referenzadresse: http://office.microsoft.com/zh-cn/assistance/HP010322532052.aspx
////////////////////////////////////////////////////////////////////////// /// /////////
Die Hilfe sagt dies und es gibt keine Probleme. Was ist das Problem? Es verwirrt mich noch mehr. Später habe ich einen Kollegen gefragt und gesagt: Ihre SQL-Anweisung ist falsch. Das Platzhalterzeichen sollte % statt * sein. Aber in der Hilfe steht * und alles funktioniert einwandfrei, wenn ich es in Access teste. Meine Kollegen können den Grund nicht erklären und suchen daher weiterhin nach Antworten auf Hilfeanfragen. Die folgenden Informationen wurden in einer anderen Hilfedatei gefunden:
////////////////////////////////////////////////////////////////////////// /// /////////
Die integrierten Mustervergleichsmethoden bieten ein allgemeines Werkzeug für den String-Vergleich. Die folgende Tabelle zeigt die Platzhalterzeichen, die mit dem Like-Operator verwendet werden können, sowie die Zahlen und Zeichenfolgen, denen sie entsprechen.
Zeichen im Muster stimmen im Ausdruck überein
? oder _ (Unterstrich) ein beliebiges einzelnes Zeichen
* oder % null oder mehr Zeichen
# Jede einzelne Zahl (0-9)
[charlist] Jedes einzelne Zeichen in charlist.
[!charlist] Jedes einzelne Zeichen, das nicht in der Charlist enthalten ist.
Sie können einen Satz aus einem oder mehreren Zeichen (Charlist) verwenden, der in Klammern ([]) eingeschlossen ist, um mit jedem einzelnen Zeichen im Ausdruck übereinzustimmen. Charlist kann die meisten Zeichen im ANSI-Zeichensatz enthalten, einschließlich Zahlen. Bestimmte Zeichen wie die linke Klammer ([), Fragezeichen (?), Ziffernzeichen (#) und Sternchen (*) können direkt mit den Symbolen selbst abgeglichen werden, indem sie in eckige Klammern eingeschlossen werden. Die schließende Klammer kann innerhalb einer Gruppe nicht als Übereinstimmung mit sich selbst verwendet werden, sie kann jedoch als einzelnes Zeichen außerhalb der Gruppe verwendet werden.
Zusätzlich zu einer einfachen Zeichenliste in eckigen Klammern kann eine Zeichenliste obere und untere Bereichsgrenzen aufweisen, die durch einen Bindestrich (-) getrennt sind. Wenn Sie beispielsweise [AZ] im Muster verwenden, wird eine Übereinstimmung erzielt, wenn das entsprechende Zeichen im Ausdruck ein Großbuchstabe im Bereich A bis Z enthält. Sie können mehrere Bereiche in eckige Klammern einschließen, ohne die Bereiche abzugrenzen. Beispielsweise entspricht [a-zA-Z0-9] jedem alphanumerischen Zeichen.
Bitte beachten Sie, dass die ANSI SQL-Platzhalterzeichen (%) und (_) nur in der Microsoft® Jet 4.X-Version und dem Microsoft OLE DB-Anbieter für Jet gültig sind. Bei Verwendung in Microsoft Access oder DAO werden sie als Text behandelt.
Weitere wichtige Regeln für den Mustervergleich sind wie folgt:
Die Verwendung eines Ausrufezeichens (!) am Anfang einer Zeichenliste zeigt an, dass eine Übereinstimmung erfolgt, wenn ein Zeichen außerhalb der Zeichenliste im Ausdruck erscheint. Wenn es außerhalb von eckigen Klammern verwendet wird, stimmt das Ausrufezeichen mit sich selbst überein.
Ein Bindestrich (-) kann am Anfang (nach dem Ausrufezeichen) oder am Ende einer Zeichenliste verwendet werden, um mit sich selbst übereinzustimmen. An jeder anderen Position identifiziert der Bindestrich einen Bereich von ANSI-Zeichen.
Wenn ein Zeichenbereich angegeben wird, müssen die Zeichen in aufsteigender Reihenfolge (AZ oder 0-100) erscheinen. [AZ] ist ein gültiger Modus, [ZA] ist ein ungültiger Modus.
Die Zeichenreihenfolge [ ] wird ignoriert; sie wird als Zeichen der Länge Null ( ) behandelt.
Referenzadresse: http://office.microsoft.com/zh-cn/assistance/HP010322842052.aspx
////////////////////////////////////////////////////////////////////////// /// //////////////
Zu diesem Zeitpunkt wurde der Grund endlich gefunden. Da ich in Access den Platzhalter * verwende, funktioniert alles einwandfrei, aber wenn ich ihn in % ändere, wird es nicht funktionieren. In C# wird nur der Platzhalter % unterstützt und das Ersetzen durch * führt zu einem Fehler! Wird dieses Problem als Kompatibilitätsproblem angesehen?
Platzhalter:
Beispiel für eine Wildcard-Beschreibung
% Jede Zeichenfolge, die null oder mehr Zeichen enthält. WHERE title LIKE '%computer%' findet alle Buchtitel, die das Wort Computer irgendwo im Titel enthalten.
_ (Unterstrich) Jedes einzelne Zeichen. WHERE au_fname LIKE '_ean' findet alle 4-Buchstaben-Namen, die auf ean enden (Dean, Sean usw.).
[ ] Gibt ein beliebiges einzelnes Zeichen in einem Bereich ([af]) oder einer Menge ([abcdef]) an. Wobei au_lname LIKE '[CP]arsen' Autorennachnamen findet, die mit arsen enden und mit einem beliebigen einzelnen Zeichen zwischen C und P beginnen, zum Beispiel Carsen, Larsen, Karsen usw.
[^] Jedes einzelne Zeichen, das nicht zum angegebenen Bereich ([af]) oder Satz ([abcdef]) gehört. Dabei findet au_lname LIKE 'de[^l]%' alle Autorennachnamen, die mit de beginnen und denen kein l folgt.
Verwenden Sie Platzhalter als Literale
Sie können Platzhalterzeichenfolgen für den Mustervergleich als Literalzeichenfolgen verwenden, indem Sie die Platzhalterzeichen in Klammern setzen. Die folgende Tabelle zeigt ein Beispiel für die Verwendung des Schlüsselworts LIKE und des Platzhalterzeichens [ ].
Symbolbedeutung
WIE '5[%]' 5%
WIE '[_]n' _n
WIE '[a-cdf]' a, b, c, d oder f
LIKE '[-acdf]' -, a, c, d oder f
WIE '[ [ ]' [
WIE ']' ]
LIKE 'abc[_]d%' abc_d und abc_de
WIE 'abc[def]' abcd, abce und abcf
Mustervergleich mit der ESCAPE-Klausel
Sucht nach Zeichenfolgen, die ein oder mehrere spezielle Platzhalterzeichen enthalten. In der Rabatttabelle in der Kundendatenbank können beispielsweise Rabattwerte mit einem Prozentzeichen (%) gespeichert werden. Um nach dem Prozentzeichen als Zeichen statt als Platzhalterzeichen zu suchen, müssen Sie das Schlüsselwort ESCAPE und ein Escape-Zeichen angeben. Beispielsweise enthält eine Beispieldatenbank eine Spalte mit dem Namen „Kommentar“, die 30 % Text enthält. Um nach Zeilen zu suchen, die 30 % der Zeichenfolge an einer beliebigen Stelle in der Kommentarspalte enthalten, geben Sie eine Where-Klausel an, die aus WHERE comment LIKE '%30!%%' ESCAPE '!' besteht. Wenn Sie ESCAPE und das Escape-Zeichen nicht angeben, gibt SQL Server alle Zeilen zurück, die die Zeichenfolge 30 enthalten.
Das folgende Beispiel zeigt, wie in der Spalte „Notizen“ der Tabelle „Titel“ in der Pubs-Datenbank nach der Zeichenfolge „50 % Rabatt beim Kauf von 100 oder mehr Exemplaren“ gesucht wird:
Notizen AUS Titeln auswählen Wo Notizen WIE „50 %% Rabatt beim Kauf von 100 oder mehr Exemplaren“ ESCAPE „%“