2009-10-01 8 views
1

J'ai une colonne varchar dans Postgres 8.3 qui détient des valeurs telles que: « 0100011101111000 »Fonction en Postgres pour convertir un varchar à un grand entier

je besoin d'une fonction qui considérerait cette chaîne comme un nombre en base 2 et crache le numérique dans la base 10. Fait sens?

Ainsi, par exemple:

'000001' -> 1.0

'000010' -> 2.0

'000011' -> 3.0

Merci!

Répondre

5

Transformer en chaîne de bits puis en nombre entier.

An example: '1110'::bit(4)::integer -> 14

Bien que vous aviez des exemples de longueur ou moins, et ont été après bigint, utilisez donc la place bit(64) et pad l'entrée avec des zéros en utilisant la fonction lpad.

lpad('0100011101111000',64,'0')::bit(64)::bigint

Voici un exemple complet ...

create temp table examples (val varchar(64)); 

insert into examples values('0100011101111000'); 
insert into examples values('000001'); 
insert into examples values('000010'); 
insert into examples values('000011'); 

select val,lpad(val,64,'0')::bit(64)::bigint as result from examples; 

Le résultat de la sélection est:

 val  | result 
------------------+-------- 
0100011101111000 | 18296 
000001   |  1 
000010   |  2 
000011   |  3 
(4 rows) 
+0

Impressionnant! Exactement ce dont j'avais besoin. Merci d'avoir partagé votre sagesse. –

Questions connexes