8 Stimmen

Wie schreibt man eine Case Sensitive Query für MS Access?

Ich möchte die Select-Abfrage für MS Access mit Groß- und Kleinschreibung kennen.

Ich habe zwei Werte für VitualMonitorName wie folgt

VCode VirtualMonitorName
Row 1 (1, 'VM1');
Row 2 (2, 'Vm1');

Hier sind beide Werte unterschiedlich.

Wenn ich schreibe

"SELECT VCode FROM VirtualMaster WHERE VirtualMonitorName like '" + Vm1 + "'";

Es antwortet nur VCode = 1.

14voto

HansUp Punkte 93765

Sie können die StrComp() Funktion mit vbBinaryCompare für einen Vergleich unter Berücksichtigung der Groß- und Kleinschreibung. Das folgende Beispiel aus dem Fenster "Sofort" zeigt, wie StrComp() funktioniert. Weitere Informationen finden Sie in der Access-Hilfe.

? StrComp("a", "A", vbBinaryCompare)
 1 

? StrComp("a", "A",vbTextCompare)
0

StrComp() gibt 0 zurück, wenn die ersten beiden Argumente als gleich bewertet werden, 1 oder -1, wenn sie ungleich sind, und Null, wenn eines der beiden Argumente Null ist.

Um die Funktion in einer Abfrage zu verwenden, geben Sie die vbBinaryCompare den Wert der Konstante (0) und nicht ihren Namen.

SELECT VCode
FROM VirtualMaster
WHERE StrComp(VirtualMonitorName, "Vm1", 0) = 0;

Dieser Ansatz ist auch für Abfragen aus anderen Anwendungen verfügbar, wenn diese die neueren Access Database Engine ("ACE")-Treiber verwenden. Zum Beispiel der folgende C#-Code

string myConnectionString =
        @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
        @"Dbq=C:\Users\Public\Database1.accdb;";
using (OdbcConnection con = new OdbcConnection(myConnectionString))
{
    con.Open();
    using (var cmd = new OdbcCommand())
    {
        cmd.Connection = con;
        cmd.CommandText = 
                "SELECT COUNT(*) AS n FROM [VirtualMaster] " +
                "WHERE StrComp([VirtualMonitorName],?,?) = 0";
        cmd.Parameters.AddWithValue("?", "Vm1");
        cmd.Parameters.Add("?", OdbcType.Int);

        var vbCompareOptions = new Dictionary<string, int>() 
        {
            {"vbBinaryCompare", 0},
            {"vbTextCompare", 1}
        };
        string currentOption = "";

        currentOption = "vbBinaryCompare";
        cmd.Parameters[1].Value = vbCompareOptions[currentOption];
        Console.WriteLine(
                "{0} found {1} record(s)", 
                currentOption, 
                Convert.ToInt32(cmd.ExecuteScalar()));

        currentOption = "vbTextCompare";
        cmd.Parameters[1].Value = vbCompareOptions[currentOption];
        Console.WriteLine(
                "{0} found {1} record(s)",
                currentOption,
                Convert.ToInt32(cmd.ExecuteScalar()));
    }
}

produziert

vbBinaryCompare found 1 record(s)
vbTextCompare found 2 record(s)

2voto

januarvs Punkte 368

Sehen Sie sich das an:

https://support.microsoft.com/kb/244693?wa=wsignin1.0

Dieser Artikel beschreibt vier Methoden, um einen JOIN unter Berücksichtigung der Groß-/Kleinschreibung mit der Microsoft Jet-Datenbank-Engine zu erreichen. Jede dieser Methoden hat Vor- und Nachteile, die vor der Wahl einer Implementierung abgewogen werden sollten. Die Methoden sind:

  • StrComp
  • Groß-/Kleinschreibung beachtender IISAM-Treiber
  • Hexadezimale Erweiterung
  • Binäres Feld

1voto

Arthur Manning Punkte 11

Fügen Sie in der Entwurfsansicht der Abfrage eine zusätzliche benutzerdefinierte Spalte hinzu, indem Sie nur integrierte Funktionen verwenden:

location: InStr(1,[VCode],"VM1",0)

der Null-Parameter fordert einen Binärvergleich an (Groß- und Kleinschreibung wird berücksichtigt), wenn die Position von "VM1" innerhalb [VCode]

setzen Sie die Kriterien in dieser Spalte auf >0 so dass nur Datensätze mit einer von Null verschiedenen Position im V-Code übereinstimmen Like "*vm*" den genauen VM1-String enthalten -

En WHERE Klausel sieht so aus:

WHERE (((VirtualMaster.VCode) Like "\*vm*") AND ((InStr(1,[VCode],"VM1",0))>0));

0voto

Ray Punkte 1

Verwendung auf einer einfacheren Ebene der Kodierung.

Als Bedingung in einer DCOUNT-Operation, die ein Feld (Spalte) überprüft, das den richtigen Fall haben muss, und leere Staaten/Gebiete ignoriert.

      '  lngcounter will count the all States 
      ' or Territories Field ( Column) with this 
      ' exact case value of 'Ohio'. ([ID] is an Autonumber ID field)

      lngCounter = DCount("[id]", Trim(Me!tboDwellingTablename), "[State/territory],'Ohio',0) = 0")

0voto

user10873320 Punkte 1

Dies gilt nur für einen Buchstaben:

MS-ACCESS SQL:

SELECT Asc(Left([Title],1)) AS t FROM Master WHERE (((Asc(Left([Title],1)))=105));

Title ist das Feld, in dem Sie suchen möchten

Master ist die Tabelle, in der Title Feld befindet sich

105 Ascii-Code für Zeichen..

In diesem Fall nur Titel, die mit i und nicht mit I beginnen

Wenn Sie nach dem Kleinbuchstaben "a" suchen möchten, ändern Sie die 105 in 97

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X