【问题标题】:Using underscore in Postgresql LIKE在 Postgresql LIKE 中使用下划线
【发布时间】:2019-03-22 09:13:47
【问题描述】:

我正在尝试在 postgresql LIKE 中使用下划线来搜索特定模式的数据,但它似乎不起作用。

客户端是9.2.21版本,服务器是9.4.12版本。

例如,

select * 
from table1 
where f1 like '___'

即使在表中有明显的匹配项时也不返回任何内容——即,存在具有匹配值的数据——例如f1 = '123'.

我想知道是否存在影响此行为的系统配置/参数?

或者这可以用其他方式解释吗?

【问题讨论】:

  • 列数据类型?
  • 是char(9)类型
  • 这些值只是一个例子。可以是 alpha。

标签: sql postgresql padding sql-like sqldatatypes


【解决方案1】:

存储在定义为char(9) 的列中的值将用空格填充到定义的长度。因此,当您在该列中存储'123' 时,它实际上存储了'123 '

你需要修剪那些尾随的空白:

where trim(f1) = '___'

但是你应该完全避免使用char 类型。与varchar 相比,它没有任何优势,但有几个缺点(你刚刚发现了一个)

【讨论】:

  • 。 .当所有值的字符数相同时,char() 不会保存一两个字节(通过不编码长度)——比如说,如果都是 ISO 标准的国家代码?
  • @GordonLinoff:不,它没有。它们以完全相同的方式存储(除了 char() 被填充存储。
  • 有趣。在大多数数据库中,char() 节省了一个或两个长度字节。
  • @GordonLinoff 我不知道“大多数”,但它绝对不会在 Postgres 或 Oracle 中节省任何东西。
  • 为什么显示char类型的字段值没有填充?就像上面示例中的 SELECT '>>' || f1 || '<<' 一样,不会显示填充。
猜你喜欢
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 2014-04-05
  • 2020-10-28
  • 2018-02-01
  • 2014-04-06
  • 1970-01-01
  • 2012-06-13
相关资源
最近更新 更多