TSQL Azure SQL server LEFT CHARINDEX

Ich habe eine TSQL-statement, die eine einzelne Tabelle auf der search nach doppelten Straßenadressnummern abfragt. Zum Beispiel "123 Street" Streichhölzer "123 St.". Ich benutze CHARINDEX, um den String zu trennen, indem du die character auf der linken Seite des Strings auswählst, aber vor dem Raum, der fast immer Zahlen ist, wie unten zu sehen:

"SELECT NewId() as NewId," + //We rename the dbo.User table as "a" then rename it again as "b" so we can look for duplicate Street Address numbers "a.Id AS LeftID,a.DateSubmitted AS LeftDateSubmitted,a.Updated AS LeftUpdated," + "a.Status AS LeftStatus,a.StreetAddress AS LeftStreetAddress," + "b.Id AS RightID,b.DateSubmitted AS RightDateSubmitted,b.Updated AS RightUpdated," + "b.Status AS RightStatus,b.StreetAddress AS RightStreetAddress " + //We join the 2 virtual dbo.User tables where table b Id's are greater than table a meaning b records are newer "FROM [User] a JOIN [User] b ON b.Id > a.Id AND " + //LEFT selects the left most characters (usually numbers) in the StreetAddress field string before the space ' ' //and eliminates the rest of the address isolating just the street address numbers for matching "LEFT(a.StreetAddress,CHARINDEX(' ',a.StreetAddress)) = LEFT(b.StreetAddress,CHARINDEX(' ',b.StreetAddress)) " + //Don't show orange or blue status records "AND b.Status != 'Orange' AND a.Status != 'Orange' AND a.Status != 'Blue' AND b.Status != 'Blue' " + //If ab record (newer) is red then ignore because it is completed and ignore a records (oldest) older than 90 days "WHERE a.DateSubmitted >= (GetDate() - 90) AND b.Status != 'Red' " + //Show newest records first "ORDER BY b.DateSubmitted DESC" 

Das hat sich bis heute gut verstanden, es wurde festgestellt, dass falsche Positives abgeholt wurden, wenn die Person die Adresse in allen Caps eingegeben hat, wie unten gesehen: Rasteransicht

Mein Verständnis der Verwendung:

  LEFT(a.StreetAddress,CHARINDEX(' ',a.StreetAddress)) 

Würde dazu führen, dass die linken character vor dem Platz für meine JOIN verwendet wird, aber das image oben zeigt Spiele, die nicht auftreten sollten? Bitte helfen Sie einem SQL-Anfänger …

Ich glaube nicht, dass die Abfrage, die Sie an den database-server senden, um diese Ergebnisse zu erhalten, ist die genaue Abfrage, die Sie mit diesem Code generieren. Nicht nur ist es falsch passende Adressen … Sie können auch sehen, dass es ID in b , die weniger als a . Legen Sie einen Bruchpunkt fest, an dem Sie die Abfrage an den server senden und die Abfragezeichenfolge prüfen und überprüfen, was Sie wirklich senden.