2016-07-06 21 views
-2

我是一個完整的初學者,所以如果我以難以理解的方式編寫此代碼,我會提前致歉。帶有兩個類似子句的SQL查詢

我建立了一個數據庫,我使用的是用戶界面,因此用戶可以獲取某些數據位。用戶需要能夠通過名字和姓氏進行搜索以返回被搜索人員的所有信息。這是我在下面使用的代碼。當我運行程序並輸入'joe bloggs'時,我彈出一個例外說'抱歉找不到匹配結果'。我確信joe bloggs在數據庫中,所以這裏沒有問題。

我是否需要考慮用戶輸入的名字和姓氏之間的空格?

SELECT * FROM TABLE 
WHERE UPPER(FirstName) LIKE UPPER(?) AND UPPER(Surname) LIKE (?); 
+0

添加一些示例表格數據和預期結果! – jarlh

+0

您使用的是MySQL還是Oracle? – jarlh

+2

您可以閱讀關於[LIKE]的一些文檔(http://docs.oracle.com/database/121/SQLRF/conditions007.htm#SQLRF52141)(Oracle) – Aleksej

回答

0

我假設用戶輸入名字只是一個變量(某種形式的,在你的問題提到了?)你想要綁定到數據庫中的名稱。

如果這個假設是正確的,你可以這樣做:

SELECT * FROM TABLE 
WHERE CONCAT(CONCAT(UPPER(FirstName), ' '), UPPER(Surname)) LIKE (?); 

這是假設用戶只在名稱中輸入一個空格。一個錯字很容易,所以最好是與給定名稱中的任何和所有空格的replace進行比較。

正如別人所說,你可以用=代替LIKE。就像名字一樣,你通常需要一個精確的匹配。

+0

這工作。謝謝你的幫助。 – Clyo

0

,如果你把joe bloggs在兩個都喜歡,當然它不會工作,因爲「喬」不喜歡「李四」。

你需要分割你的字符串,或者更好的是爲用戶提供2個輸入。

如果你只想精確匹配,那就用=運算符吧,不喜歡。 如果你想找到含有用戶輸入名稱,添加'%」:

WHERE UPPER(FirstName) LIKE UPPER('%'+userInput+'%)