2013-12-08 47 views
1

假設我有一個名爲'Customer'的表,其中有很多列,我想要顯示所有名字以'Thomas'(Lastname ='Thomas')結尾的客戶。以下查詢顯示空結果(無行)。它也沒有顯示任何錯誤。在SQLite3的列中搜索特定的文本值

SELECT * FROM Customer WHERE Lastname = 'Thomas'; 

在執行以下查詢時給了我正確的結果。

SELECT * FROM Customer WHERE Lastname LIKE '%Thomas%'; 

我想知道我的第一個查詢有什麼問題。我用Npm使用sqlite3。下面是'.show'命令的結果(只是在配置問題的情況下)。

sqlite> .show 
    echo: off 
    explain: off 
    headers: on 
    mode: column 
nullvalue: "" 
    output: stdout 
separator: "|" 
    stats: off 
    width: 
+0

您認爲應該匹配的記錄的「姓氏」列中的確切值是什麼? –

回答

2
  1. 使用等代替=
  2. 微調,以保證;隨行的空間亂搞

所以查詢將

SELECT * FROM Customer WHERE trim(Lastname) LIKE 'Thomas'; 

取決於你的類型,可能你不需要點2,因爲可以在mysql manual

所有MySQL歸類都是PADSPACE類型。這意味着,在MySQL中的所有CHAR 和VARCHAR值不考慮任何 尾隨空格

但1點可能是解決方案相比。實際上,如果你想避免問題,你應該用LIKE來比較字符串,而不是=。

如果你仍然有問題,可能你將不得不使用collases。

SELECT * 
FROM t1 
WHERE k LIKE _latin1 'Müller' COLLATE latin1_german2_ci; #using your real table collation 

更多信息here但具體是用「托馬斯」你不應該需要它,因爲它沒有得到任何特殊字符。

+0

我能夠使用您提供的查詢查看結果。感謝Carlos的幫助。 :-) – shaunthomas999