2009-04-22 17 views
2

Ich habe eine Abfrage, die Eingabe vom Endbenutzer und vergleicht es mit 2 Spalten einzeln und die beiden Spalten verkettet.SQL-Verkettung von Zeichenfolgen?

Entschuldigen Sie die massive Syntax fehlschlagen, aber ich versichere Ihnen, es ist richtig im Programm.

Es ist in PHP geschrieben, Abfragen einer SQL SERVER 2005-Datenbank, und Groß-und Kleinschreibung nicht beachtet.

Wenn Sie einen Namen eingeben (zuerst oder zuletzt), werden die korrekten Ergebnisse zurückgegeben. Wenn Sie jedoch zuerst eingeben, dann gibt das Leerzeichen und zuletzt eine leere Menge zurück.

Irgendwelche Ideen?

+0

Upvotes für alle, denn Sie sind in Ordnung ... –

Antwort

11

, das liegt daran, dass ‚full_name‘ eine wörtliche und nicht ein Spaltenname, es existiert nicht in der WHERE-Klausel Ebene

Sie

OR f_name + ' ' + l_name = user-input 

statt OR ‚full_name‘ hinzufügen müssen = user-input

+0

SQL würde einen "Ungültige Spaltenname" -Fehler werfen, wenn ich versuchen würde, full_name ohne die '' ... –

+0

zu verwenden, weil es in der Tabelle – SQLMenace

1

Für den Anfang entfernen Sie die einfachen Anführungszeichen um den full_name in den letzten wo Kriterien. Jetzt wird die Benutzereingabe mit dem String-Literal 'full_name' verglichen.

Der Verkettungsteil sollte a-ok sein!

+0

SQL nicht existiert würde einen Fehler "Ungültiger Spaltenname" ausgeben, wenn ich versuchen würde, full_name ohne die '' ... zu verwenden. –

2

'full_name' ist eine Zeichenkette nicht die Spalte ...

(f_name + '' + L_NAME) = Benutzereingabe

1

Das Problem in dieser Zeile ist:

OR 'full_name' = user-input 

Vorausgesetzt, das ist tatsächlich, was Sie notiert haben, vergleichen Sie die Literal-Zeichenfolge "full_name" mit dem angegebenen Eingang. Wenn Sie einzelne Anführungszeichen um etwas setzen, wird es als ein Literal behandelt. Versuchen Sie Folgendes:

SELECT f_name, l_name, (f_name + ' ' + l_name) AS full_name 
FROM users_table 
    WHERE f_name = user-input 
    OR l_name = user-input 
    OR full_name = user-input 
2

Versuch:

SELECT f_name, 
     l_name, 
     (f_name + ' ' + l_name) AS full_name 
FROM users_table 
WHERE f_name = user-input 
    OR l_name = user-input 
    OR f_name + ' ' + l_name = user-input 
5

Unter dem "einen Mann unterrichten zu fischen" Theorie ...

Sie keine Spalte Alias ​​in einer where oder group by-Klausel verwenden können . Sie können es in einer order by-Klausel verwenden. Um eine Spalte alias die Art und Weise zu verwenden, die Sie wollen, würden Sie etwas wie zu tun ...

SELECT [Full Name] FROM 
    (SELECT f_name, l_name, f_name + ' ' + l_name AS [Full Name] 
    FROM users_table) 
    WHERE [Full_Name] = @paramVal 
+0

Was ist der Sinn eines Alias? Geesh. –

+0

Ich höre Sie, aber ich bin weit davon entfernt, über interne SQL Server-Designentscheidungen zu sprechen. :) –

1

Dies funktioniert:

SELECT * 
FROM users_table 
WHERE CONCAT(first_name,' ',last_name) = user-input; 
0

Stellen Sie sicher, dass der Benutzer eingibt „full_name“ (ohne die Anführungszeichen) als die Benutzereingabe und die Datenbank wird einige Zeilen zurückgeben.

Verwandte Themen