Re: generar cadenas alfanumericas

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Victor Lopez <d01m01a2000(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: generar cadenas alfanumericas
Date: 2007-04-09 16:59:28
Message-ID: 20070409165928.GE10785@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Victor Lopez escribió:
> Puede sonar a 'deja vu' porque creo que lo pregunté ya ... pero ...
>
> Existe alguna manera, en PostgreSQL, de generar una cadena alfanumérica
> larga ?

Que tan larga? Yo uso esta funcion de vez en cuando, a veces en
conjuncion con generate_series():

create or replace function num2pal(numeric) returns text
strict immutable language plperl as $$
my $num = shift;
my $verb="";
my $digito = sub {
if ($_[0] == 1) {
return "uno";
} elsif ($_[0] == 2) {
return "dos";
} elsif ($_[0] == 3) {
return "tres";
} elsif ($_[0] == 4) {
return "cuatro";
} elsif ($_[0] == 5) {
return "cinco";
} elsif ($_[0] == 6) {
return "seis";
} elsif ($_[0] == 7) {
return "siete";
} elsif ($_[0] == 8) {
return "ocho";
} elsif ($_[0] == 9) {
return "nueve";
}
return undef;
};

my ($miles, $cents, $decs, $unids);

$miles=&$digito(int($num / 1000));
if (defined($miles)) {
if ($miles eq "uno") {
$verb.="mil ";
} else {
$verb.="$miles mil ";
}
$num -= 1000 * int($num / 1000);
}

$cents=&$digito(int($num / 100));
if (defined($cents)) {
if ($cents eq "uno") {
if (int($num) - int($num / 100) > 0) {
$verb.="ciento ";
} else {
$verb.="cien ";
}
} elsif ($cents eq "cinco") {
$verb.="quinientos ";
} elsif ($cents eq "siete") {
$verb.="setecientos ";
} elsif ($cents eq "nueve") {
$verb.="novecientos ";
} else {
$verb.="${cents}cientos ";
}
$num -= 100 * int($num / 100);
}

$decs=int($num / 10);
if ($decs==1) {
$unids=int($num - 10 * int($num/10));
if ($unids == 1) {
$verb.="once ";
} elsif ($unids == 2) {
$verb.="doce ";
} elsif ($unids == 3) {
$verb.="trece ";
} elsif ($unids == 4) {
$verb.="catorce ";
} elsif ($unids == 5) {
$verb.="quince ";
} elsif ($unids >= 6) {
$verb.="dieci".&$digito($unids);
} else {
$verb.="diez";
}
$num-=$unids;
} elsif ($decs==2) {
$unids=int($num - 10 * int($num/10));
if ($unids>0) {
$verb.="veinti".&$digito($unids);
} else {
$verb.="veinte";
}
$num-=$unids;
} elsif ($decs==3) {
$verb.="treinta ";
} elsif ($decs==4) {
$verb.="cuarenta ";
} elsif ($decs==5) {
$verb.="cincuenta ";
} elsif ($decs==6) {
$verb.="sesenta ";
} elsif ($decs==7) {
$verb.="setenta ";
} elsif ($decs==8) {
$verb.="ochenta ";
} elsif ($decs==9) {
$verb.="noventa ";
}
if ($decs>=2 && ($num - 10 * int($num/10) > 0)) {
$verb.="y ";
}
$num -= 10 * int($num / 10);

$unids=&$digito(int($num));
$verb.="".($unids || "")." ";
$num -= int($num);

if ($num > 0) {
$verb .= "coma " . ($num);
}
$verb =~ s/ *$//;
return $verb;
$$;

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message HERMES ZAMBRA 2007-04-09 17:09:06 Re: Pido opinion sobre almacenamiento de imagenes en Postgres
Previous Message Miguel A. Valero 2007-04-09 16:59:27 agrupamiento....