【问题标题】:"LIKE" does not work as expected“LIKE”没有按预期工作
【发布时间】:2009-10-09 11:00:38
【问题描述】:

在 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 就可以了!

谢谢。

【问题讨论】:

  • 您可能想编辑您的问题 - 我不明白。如果 postgres 没有在您的查询中显示代码为“111”(例如)的数据,那么有些东西坏了,但老实说 - 我真的不相信。向我们展示数据、查询、收到的结果和预期的结果。

标签: postgresql sql-like


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    (编辑:我发布了以下内容(使用 AND 运算符,而不是 OR)。

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-05
      • 2021-06-23
      • 2021-10-19
      • 2020-03-18
      • 2012-06-14
      • 2014-11-15
      • 1970-01-01
      • 2012-07-02
      • 2011-09-07
      相关资源
      最近更新 更多