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
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.... |