"Pavel Stehule" <pavel.stehule@gmail.com> writes:
> It has little bit strange behave on 8.3. It works well, but I have to
> use casting.
> postgres=# select substring('1234' from to_number('3', '999999')::int for 3);
> substring
> -----------
> 34
> (1 row)
Yeah, the OP is getting burnt by an implicit cast to text, which the
parser picks because there is no implicit cast from numeric to integer
... but substring(text,text,text) has completely different behavior
from substring(text,int,int).
The reason we got rid of most implicit casts to text for 8.3 was exactly
to stop surprising choices like this one.
>> This is a sample, really i like to use an expression using date_part() as
>> the first parameter for substring.
There's no implicit cast from float8 to integer, either.
regards, tom lane