2010-12-13 6 views
0

Ich habe eine Tabelle namens FinalForgotten, die nur ein Feld namens aname enthält. Das Feld könnte entweder wie Smith John oder Smith, John aussehen. Also sind sowohl der Nachname als auch der Vorname im selben Feld und durch Leerzeichen oder Komma getrennt. Das Verteidigungsfeld enthält drei Felder: erster_name, letzter_name, mittlerer_anfang. Das Feld first_name enthält Daten, die genau einem Stück eines Daten-IN-Felds entsprechen (z. B. John). Und das Feld last_name enthält Daten, die genau einem Datenstück IN einem Feld entsprechen (z. B. Smith). Ich versuche, alle FinalForgotten Aname-Datensätze mit einer mittleren Initiale in eine neue Tabelle zu bringen (z. B. Smith, John S). Die Verteidigungstabelle ist, was diese mittlere Initiale hat.Überprüfung, ob das Feld in der Tabelle Leerzeichen oder Komma enthält - MS-Access

arbeitet Dies würde:

SELECT left([aname],InStr(1,[aname],",")-1) & " "& right([aname],Len(aname)-InStr(1,[aname],",")) & " "& summary_judgment.middle_initial AS fullnameINTO FinalForgottenWithMiddle FROM FinalForgotten INNER JOIN summary_judgment ON((left(FinalForgotten.aname,InStr(1,FinalForgotten.[aname],",")-1))=summary_judgment.last_name) AND((right(FinalForgotten.aname,Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],","))=summary_judgment.first_name)); 

Aber es wird „ungültiger Prozeduraufruf“ zurückgeben sollte FinalForgotten enthält ein Feld, das kein Komma wie hat: Smith John.

daher an dieser Adresse, habe ich versucht, ob ein Komma in dem Feld war oder nicht Faktor: einen „fehlenden Operator Syntax“ Das gibt mir

SELECT left([aname], IIF(instr([aname], ",") = 0, InStr(1,[aname]," ")-1),InStr(1,[aname],",")-1) & ", " & right([aname], IIF(instr([aname], ",") = 0,Len(aname)-InStr(1,[aname]," "),Len(aname)-InStr(1,[aname],",") & " " & defense_final.middle_initial AS fullname INTO FinalForgottenWithMiddle 
FROM FinalForgotten INNER JOIN defense_final ON 
((right(FinalForgotten.aname,IIF(instr([aname], ",") = 0,Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," ")),Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],","))=defense_final.first_name)) 
AND 
((left(FinalForgotten.aname,,IIF(instr([aname], ",") = 0,InStr(1,FinalForgotten.[aname]," ")-1)),InStr(1,FinalForgotten.[aname],",")-1))=defense_final.last_name); 

Fehler und zeigt das Wort AS.

Danke für die Antwort.

Antwort

0

Es scheint einige fehlende Klammern zu geben.

SELECT left(
     [aname], 
     IIF(instr([aname], ",") = 0, 
     InStr(1,[aname]," ")-1, 
     InStr(1,[aname],",")-1 
     ) 
    ) 
    & ", " & 
    right(
     [aname], 
     IIF(instr([aname], ",") = 0, 
     Len(aname)-InStr(1,[aname]," "), 
     Len(aname)-InStr(1,[aname],",") 
     ) 
     ) 
    & " " & 
    defense_final.middle_initial AS fullname 
INTO FinalForgottenWithMiddle 
FROM FinalForgotten 
INNER JOIN defense_final 
ON 

    right(FinalForgotten.aname, 
    IIF(instr([aname], ",") = 0, 
    Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," "), 
    Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],",") 
    ) 
    )=defense_final.first_name 

AND 

    left(FinalForgotten.aname, 
    IIF(instr([aname], ",") = 0, 
     InStr(1,FinalForgotten.[aname]," ")-1, 
     InStr(1,FinalForgotten.[aname],",")-1 
     ) 
    )=defense_final.last_name 
+0

Danke Ich mochte auch die Art, wie Sie die Abfrage angelegt haben. – JohnMerlino