Search Postgresql Archives

Re: Regular expression. How to disable ALL meta-character

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks  for your help!

Just want to share the solution I got to solve my problem. I wanted to be eable to search a string (say X) (non case sensitive) without having meta-character involved. The X string come directy from the web so any [%]* may cause error in regular expression (because they form non valid expression)

1) Using like: select * from mytable where lower(mycol) LIKE lower("%" || lower(X) || "%");
Mostly perfect solution. Don't crash but % still have a special meaning. Wich means anything
2)Using regular expression: select * from mytable where mycol ~* ('***=' || X)
For the test I did it doesn't, fit all my need. No meta character and no escaping to do on X before launching the SQL request.


Thanks for your help!!!
Have a great day
/David


Chris Travers wrote:

David Gagnon wrote:






Maybe there is a simple way to to this but I want find string X in different column. The search must not be case sensitive.

So that searching "aBc" in "abcDef" return true. I don't want META-CHaracter. Or at least I don't want meta-character to cause errors (i.e.: No

Ok, how about a better way to do this?

select * from mytable where lower(mycol) LIKE lower("%" || lower(X) || "%");

Does this work? It seems that this may be the best way to handle this sort of thing.

Best Wishes,
Chris Travers
Metatron Technology Consulting

ERROR:  invalid regular expression: brackets [] not balanced.



Thanks for your help
/David








I found this in the manual .. but haven't found example :-(:
: ....with ***=, the rest of the RE is taken to be a literal string, with all characters considered ordinary characters.



Read again the entire sentence, especially the first few words:

 If an RE begins with ***=, the rest of the RE is taken to be a
 literal string, with all characters considered ordinary characters.

Here are some examples:

SELECT 'test string' ~ 'test[*';
ERROR:  invalid regular expression: brackets [] not balanced

SELECT 'test string' ~ '***=test[*';
?column? ----------
f
(1 row)

SELECT 'test[* string' ~ '***=test[*';
?column? ----------
t
(1 row)





---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings





---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@xxxxxxxxxxxxxx

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux