like '%'在PostgreSQL中可以正常工作在varchar数据类型中,而不工作在char数据类型中。
在PostgreSQL中创建了如下表:create table movie(movie_name varchar(20), director char(20));
[注:movie_name为varchar类型,director为char类型]并使用下面的查询插入几行。
insert into movie values('JaiBhim', 'Gnanavel');
insert into movie values('Dharbar', 'ARM');
之后,我使用了下面的select查询和'%'。
select *
from movie
where movie_name like '%m';
我得到了正确的行细节。[JaiBhim and Gnanavel].
我使用了另一个带有'%'的select查询,如下所示。
select *
from movie
where director like '%M';
对于这个,我期望返回一行,但它返回0行。
对于varchar, 'like %'给出正确的结果,对于char数据类型,它不给出。
这是预期的行为吗?
character
用空格填充值,因此模式'%M'
只在第10个字符是M
时匹配character(10)
。
最好的解决方案是避免使用character
而使用character varying
,就像文档建议的那样。除此之外,您还可以使用正则表达式:
WHERE movie_name ~ 'M *$'