寻找一个简单的SQL(PostgreSQL)正则表达式或类似的解决方案(可能是soundex),它将允许灵活的搜索。因此在搜索期间省略了破折号,空格等。作为搜索的一部分,只在表格中搜索原始字符:
目前正在使用:
SELECT * FROM Productions WHERE part_no ~* '%search_term%'
如果用户键入UTR-1,则无法显示存储在数据库中的UTR1或UTR 1.
但是当part_no有一个短划线并且用户省略了这个字符时,匹配不会发生(反之亦然)
搜索部分 UTR-1 的示例应找到以下所有匹配项。
UTR1
UTR --1
UTR 1
任何建议......
答案 0 :(得分:2)
SELECT *
FROM Productions
WHERE REGEXP_REPLACE(part_no, '[^[:alnum:]]', '')
= REGEXP_REPLACE('UTR-1', '[^[:alnum:]]', '')
在REGEXP_REPLACE(part_no, '[^[:alnum:]]', '')
上创建一个索引,以便快速工作。
答案 1 :(得分:2)
您可能会在postgresql中找到官方的内置(至少从8.3开始)全文搜索功能,值得一看:
http://www.postgresql.org/docs/8.3/static/textsearch.html
例如:
It is possible for the parser to produce overlapping tokens from the
same of text.
As an example, a hyphenated word will be reported both as the entire word
and as each component:
SELECT alias, description, token FROM ts_debug('foo-bar-beta1');
alias | description | token
-----------------+------------------------------------------+---------------
numhword | Hyphenated word, letters and digits | foo-bar-beta1
hword_asciipart | Hyphenated word part, all ASCII | foo
blank | Space symbols | -
hword_asciipart | Hyphenated word part, all ASCII | bar
blank | Space symbols | -
hword_numpart | Hyphenated word part, letters and digits | beta1