PostgreSQL查询文本列忽略特殊字符

时间:2016-06-14 17:57:51

标签: postgresql

我有一个包含文本列的表,比如说车号。

现在我想查询表格中包含特定车辆编号的字段。

匹配时我不想考虑非字母数字字符。

example: query condition - DEL123
         should match    - DEL-123, DEL/123, DEL@123, etc...

2 个答案:

答案 0 :(得分:4)

如果您知道要跳过哪些字符,请将它们作为此translate()调用的第二个参数(比正则表达式函数更快):

select * 
from a_table
where translate(code, '-/@', '') = 'DEL123';

否则,您只能使用regexp_replace()来比较字母数字字符:

select * 
from a_table
where regexp_replace(code, '[^[:alnum:]]', '', 'g') = 'DEL123';

答案 1 :(得分:0)

@klin的答案很棒,但不是很容易理解,所以如果您正在搜索数百万条记录(可能不是您的情况,但也许其他人有类似问题寻找答案) ,使用正则表达式可能会产生更好的结果。

以下将使用代码上的索引显着减少测试的行数:

DateTimeValue
-----------------------
2016-06-16 09:00:00.000