在SQLite3中的列中搜索特定的文本值

时间:2013-12-08 13:46:39

标签: sql node.js sqlite

假设我有一个名为'Customer'的表,列有很多列,我想显示所有姓名以'Thomas'结尾的客户(Lastname ='Thomas')。以下查询显示空结果(无行)。它也没有显示任何错误。

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: 

1 个答案:

答案 0 :(得分:2)

  1. 使用Like代替=
  2. 修剪确保没有空间乱搞
  3. 所以查询将是

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

    取决于您的类型,可能您不需要第2点,因为可以在mysql manual中阅读

      

    所有MySQL排序规则都是PADSPACE类型。这意味着所有CHAR   MySQL中的VARCHAR值与VARCHAR值进行比较而不考虑任何值   尾随空格

    但第1点可能是解决方案。实际上,如果你想避免问题,你应该将字符串与LIKE进行比较,而不是=。

    如果您仍有问题,可能需要使用整理。

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

    更多信息here但特别是'托马斯'你不应该需要它,因为它没有任何特殊字符。