Thread: bug with RE

bug with RE

From
Тучков Михаил
Date:
Please, help me!
My code:
"IF char_length(substring(str from '^[a-zA-Z]*://'))=0 THEN  str:= 'http://'||str;
END IF;"

If str= http://www.msn.com then nothing happen
(all is OK), but if str= just www.msn.com then nothing happen too!

Why?

Then I experimen with that:
I change '=' to '<>'results:
str=http://www.msn.com -> http://http://www.msn.com
str=www.msn.com -> http://www.msn.com

Thank you.


Re: bug with RE

From
Stephan Szabo
Date:
On Thu, 26 Jul 2007, [UTF-8] =D0=A2=D1^C=D1^G=D0=BA=D0=BE=D0=B2 =D0^\=D0=B8=
=D1^E=D0=B0=D0=B8=D0=BB wrote:

> Please, help me!
> My code:
> "IF char_length(substring(str from '^[a-zA-Z]*://'))=3D0 THEN
>    str:=3D 'http://'||str;
> END IF;"
>
> If str=3D http://www.msn.com then nothing happen
> (all is OK), but if str=3D just www.msn.com then nothing happen too!
>
> Why?


According to:
 http://www.postgresql.org/docs/8.2/interactive/functions-matching.html
a non-match returns NULL, whose char_length is also NULL.

Using one of the regexp operators ~ or ~* would probably be easier, but if
you really wanted to do this with substring, you should be checking for no
match, not a 0 length match.