代码之家  ›  专栏  ›  技术社区  ›  PeterMmm

“like”不能按预期工作

  •  2
  • PeterMmm  · 技术社区  · 16 年前

    在PostgreSQL 8中,为什么这样可以

    select * from prod where code like '1%'
    select * from prod where code like '%1'
    

    但这将返回0行(有以数字1开头/结尾的代码)

    select * from prod where code like '1%1'
    

    更新

    这发生在我目前的生活中:

    # psql --version
    psql (PostgreSQL) 8.3.7
    
    
    create table a(code char(10));
    CREATE TABLE
    db=# insert into a values('111');
    INSERT 0 1
    db=# select * from a where code like '1%';
        code
    ------------
     111
    (1 row)
    
    db=# select * from a where code like '%1';
     code
    ------
    (0 rows)
    
    db=# select * from a where code like '1%1';
     code
    ------
    (0 rows)
    

    更新2

    它是数据类型!用varchar就可以了!

    谢谢您。

    2 回复  |  直到 16 年前
        1
  •  7
  •   anonymousen    16 年前

    是因为数据类型是char(10)?

    这意味着它将始终占用10个字符,即使您只是插入一些较短的字符,如“111”。因此,如果不使用末尾带有“1”的10个字符的字符串,“%1”和“1%1”将永远不匹配。

        2
  •  1
  •   Amadiere    16 年前

    (编辑:我已经发布了以下内容(使用了一个和运算符,而不是或)。

    SELECT * FROM prod WHERE code LIKE '%1' OR code LIKE '1%';
    

    如果需要和运算符,则问题中的查询应该可以正常工作。但是,如果您想使用或运算符,那么上面的查询可能是更好的方法之一。