Re: Determine length of numeric field
От | Jasen Betts |
---|---|
Тема | Re: Determine length of numeric field |
Дата | |
Msg-id | ijf2f2$ald$1@reversiblemaps.ath.cx обсуждение исходный текст |
Ответ на | Determine length of numeric field (Tony Capobianco <tcapobianco@prospectiv.com>) |
Список | pgsql-sql |
On 2011-02-15, Tony Capobianco <tcapobianco@prospectiv.com> wrote: > I'm altering datatypes in several tables from numeric to integer. In > doing so, I get the following error: > > dw=# \d uniq_hits > Table "support.uniq_hits" > Column | Type | Modifiers > ------------+---------+----------- > sourceid | numeric | > hitdate | date | > total | numeric | > hitdate_id | integer | > Indexes: > "uniq_hits_hitdateid_idx" btree (hitdate_id), tablespace > "support_idx" > Tablespace: "support" > > esave_dw=# alter table uniq_hits alter sourceid type int; > ERROR: integer out of range > > Sourceid should not be more than 5 digits long. I'm able to perform > this query on Oracle and would like something similar on postgres 8.4: > > delete from uniq_hits where sourceid in (select sourceid from uniq_hits > where length(sourceid) > 5); delete from uniq_hits where sourceid in (select sourceid from uniq_hits where length(sourceid::text) > 5); or even: delete from uniq_hits where length(sourceid::text) > 5; but using length on numbers is usually the wrong way. do this instead: delete from uniq_hits where abs(sourceid) > 2^32-1; Which will hit all the ones that can't be converted. You may want to do a select first to see what you're deleting. > I haven't had much luck with the length or char_length functions on > postgres. The length functions only work with strings. using them on numbers is usually the wrong thing as there is not a 1 to 1 mapping between strings an numbers. Strings of length only 3 can be out of range for integer (eg: '9e9'), (but numerics never look like that, larger floats can though) care to guess the result of this query? select '9000000000000000'::float, length('9000000000000000'::float::text); -- ⚂⚃ 100% natural
В списке pgsql-sql по дате отправления: