PostgreSQL - 忽略LIKE表达式中的字符序列

时间:2014-07-29 13:12:46

标签: sql regex postgresql

我想知道是否有办法忽略PostgreSQL表达式中的一系列字符LIKE 在我的表中,我有一些值,从不同数量的零开始。我希望能够找到正确的值,而不将这些零放在我的LIKE表达式中。 有一个例子:

id value
1  00045
2  00145
3  00003

现在,当我开始寻找值00045时,我想只输入" 45"并且只返回与id = 1相关的值。喜欢'%45'显然是不可能的,因为我不希望选择值00145。

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以在比较之前将字段转换为where子句中的整数(SQL Fiddle):

SELECT * 
FROM MyTable m
WHERE CAST(coalesce(m.value, '0') AS integer) = 45

如果您知道value将始终包含某些内容,那么您可以省略合并(SQL Fiddle):

SELECT * 
FROM MyTable m
WHERE CAST(m.value AS integer) = 45;

答案 1 :(得分:1)

您可以使用ltrim()功能。它需要省略前导字符的第二个参数:

select *
from example e
where ltrim(e.value, '0') = '45';

或者,如果值总是5个字符长,则可以使用:

select *
from example e
where e.value = lpad('45', 5, '0');

第一种方法的优点是它不假设该值是整数。第二个优点是它允许Postgres在example(value)上使用索引(如果有的话)。