cwbe coordinatez:
101
792011
5684183
5696454
5697212

ABSOLUT
KYBERIA
permissions
you: r,
system: public
net: yes

neurons

stats|by_visit|by_K
source
tiamat
K|my_K|given_K
last
commanders
polls

total descendants::8
total children::2
show[ 2 | 3] flat


Neslo by tohle resit pomoci nejaky interni funkce? PgSQL ma funkce to_hex() a encode(), pomoci kterejch se da cislo zakodovat do base 16 a base 64, na base 36 sem nasel jenom tuhle custom funkci:

http://www.rightbrainnetworks.com/blog/base36-conversion-in-postgresql/

CREATE OR REPLACE FUNCTION base36_encode(IN digits bigint, IN min_width int = 0)
  RETURNS varchar AS $$
        DECLARE
			chars char[];
			ret varchar;
			val bigint;
		BEGIN
		chars := ARRAY['0','1','2','3','4','5','6','7','8','9'
			,'A','B','C','D','E','F','G','H','I','J','K','L','M'
			,'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
		val := digits;
		ret := '';
		IF val < 0 THEN
			val := val * -1;
		END IF;
		WHILE val != 0 LOOP
			ret := chars[(val % 36)+1] || ret;
			val := val / 36;
		END LOOP;

		IF min_width > 0 AND char_length(ret) < min_width THEN
			ret := lpad(ret, min_width, '0');
		END IF;

		RETURN ret;

END;
$$ LANGUAGE 'plpgsql' IMMUTABLE;

-- -------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION base36_decode(IN base36 varchar)
  RETURNS bigint AS $$
        DECLARE
			a char[];
			ret bigint;
			i int;
			val int;
			chars varchar;
		BEGIN
		chars := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

		FOR i IN REVERSE char_length(base36)..1 LOOP
			a := a || substring(upper(base36) FROM i FOR 1)::char;
		END LOOP;
		i := 0;
		ret := 0;
		WHILE i < (array_length(a,1)) LOOP		
			val := position(a[i+1] IN chars)-1;
			ret := ret + (val * (36 ^ i));
			i := i + 1;
		END LOOP;

		RETURN ret;

END;
$$ LANGUAGE 'plpgsql' IMMUTABLE;




000001010079201105684183056964540569721205697266
ziman
 ziman      12.12.2010 - 18:59:35 , level: 1, UP   NEW
do postgresu mozes afaik pisat funkcie v C

00000101007920110568418305696454056972120569726605697645
Harvie
 Harvie      12.12.2010 - 23:23:29 (modif: 12.12.2010 - 23:26:07), level: 2, UP   NEW !!CONTENT CHANGED!!
vazne? sem newbie :-) to je skvele. cim dal tim vic se mi libi postgres ;)
asi to nejde zapsat primo do SQL dotazu co? ;)
ano jde mi o rychlost...

0000010100792011056841830569645405697212056972660569764505698537
Thunder Perfect Mind
 Thunder Perfect Mind      13.12.2010 - 14:15:59 , level: 3, UP   NEW
do vacsiny znamych db mozes pisat vlastne embedded funkcie v roznych jazykoch (najcastejsie c/c++, obcas dalsie). ci je to dobry napad je druha vec.

000001010079201105684183056964540569721205697266056976450569853705699283
Harvie
 Harvie      13.12.2010 - 20:55:10 , level: 4, UP   NEW
jo... asi se radsi obejdu bez toho... je to jenom takova haluz a zkoumam co vsechno pgsql umi :-)
ukladat v obou tvarech me taky napadlo, ale asi se na to vykaslu a vyresim to v logice aplikace... ono ukladat retezec kterej by reprezentoval desitkovy cislo, ktery je stejne nakonec ulozeny binarne mi prijde trochu prehnany ;) a pokud to nebude vykonostni problem, tak bych se na to radsi vykaslal.

000001010079201105684183056964540569721205697249
maniac
 maniac      12.12.2010 - 18:43:17 , level: 1, UP   NEW
myslis ze to bude pomale? resp preco nechces pouzit vlastnu fciu?

00000101007920110568418305696454056972120569724905698520
Harvie
 Harvie      13.12.2010 - 14:09:27 , level: 2, UP   NEW
a co si myslis o rychlosti ty? dejme tomu, ze to zavolam na ID kazdyho zaznamu co budu selectovat... ja nevim jak kvalitni je interpreter toho plpsql...

0000010100792011056841830569645405697212056972490569852005698599
maniac
 maniac      13.12.2010 - 14:46:08 , level: 3, UP   NEW
myslim ze plpgsql je relativne rychle, ale predpokladam ze nie rychlejsie ako interna funkcia postgresu.
ak mas zaujem o integrovanu funkciu, tak odporucam pozriet contrib adresar v zdrojakoch postgresu. su tam 3rd party funkcie a niektore su velmi jednoduche, t.j. vhodne ako priklad na vytvorenie vlastnej base34 funkcie ( v jazyku C )

aj ked nerad, ale pouzivam takto pgcurl a pgcrypto

0000010100792011056841830569645405697212056972490569852005698540
Thunder Perfect Mind
 Thunder Perfect Mind      13.12.2010 - 14:17:44 , level: 3, UP   NEW
alebo ho ukladat v oboch tvaroch.