在类Postgresql中使用下划线
我试图在postgresql中使用下划线来搜索特定的数据模式,但它似乎不起作用 客户端版本为9.2.21,服务器版本为9.4.12 比如说,在类Postgresql中使用下划线,sql,postgresql,padding,sql-like,sqldatatypes,Sql,Postgresql,Padding,Sql Like,Sqldatatypes,我试图在postgresql中使用下划线来搜索特定的数据模式,但它似乎不起作用 客户端版本为9.2.21,服务器版本为9.4.12 比如说, select * from table1 where f1 like '___' 即使表中存在明显的匹配项,也不返回任何内容--即,存在具有匹配值的数据--例如f1='123' 我想知道是否存在影响此行为的系统配置/参数 或者这可以用其他方式解释吗?存储在定义为char(9)的列中的值将用空格填充到定义的长度。因此,当您在该列中存储'123'时,它实
select *
from table1
where f1 like '___'
即使表中存在明显的匹配项,也不返回任何内容--即,存在具有匹配值的数据--例如f1='123'
我想知道是否存在影响此行为的系统配置/参数
或者这可以用其他方式解释吗?存储在定义为
char(9)
的列中的值将用空格填充到定义的长度。因此,当您在该列中存储'123'
时,它实际上存储'123'
您需要修剪这些尾随空白:
where trim(f1) = '___'
但是您应该完全避免使用
char
类型。与varchar
相比,它没有任何优势,但有几个缺点(您刚刚发现了一个)列数据类型?它是char(9)类型值只是一个示例。可能是阿尔法。当所有值的字符数相同时(例如,如果所有值都是ISO标准国家/地区代码),是否char()
保存一个或两个字节(不编码长度)?@GordonLinoff:不。它们的存储方式完全相同(除了char()
是填充存储的。有趣的是,在大多数数据库中,char()
保存一到两个长度字节。@GordonLinoff我不知道“most”,但它肯定不会在Postgres或Oracle中保存任何内容。为什么显示char类型的字段值时不显示填充?例如SELECT'>'|f1 | |'