Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con SQL (https://www.clubdelphi.com/foros/showthread.php?t=94766)

pepesoft 04-07-2020 00:59:47

Ayuda con SQL
 
Hola, tengo un caso de una consulta que es la siguiente
Código Delphi [-]
var
  tValor, tNumero: Integer;
  tText :string;
begin
  tTUni := TUniQuery.Create(nil);
  tTUni.Connection := DBConexion.BaseDatos;

  tText  := 'TPT';
  tValor := 1;

  with Uniquery do
  begin

    Close;
    SQL.Clear;
    SQL.Add('SELECT MAX(SUBSTR(codigo,4))::integer + 1 AS numero FROM clientes');
    SQL.Add(' WHERE LEFT(codigo,3) = :texto ');
    ParamByName('texto').AsString := tText;
    Open;
    tNumero  := FieldByName('numero').AsInteger;
    if tNumero > 0 then
      Edit1.Text := tText + FormatFloat( '#',(tNumero) )
    else
      Edit1.Text := tText + FormatFloat( '#',tValor );
   end;

end;
Lo que sucede es que quiero generar un código alfanumerico en postgresql, que contenga 3 letras y numeros, algo asi
TPT1, TPT2, ..., .., TPT100, .., TPT2300, así sucesivamente. con este código solo genera hasta el numero diez y luego todos son 10, algo esta fallando y no me he dado cuenta.

Casimiro Notevi 04-07-2020 02:13:36

Bien, aunque no tiene nada que ver con SQL.

mamcx 04-07-2020 02:36:39

Cita:

Empezado por pepesoft (Mensaje 537869)
TPT1, TPT2, ..., .., TPT100, .., TPT2300, así sucesivamente. con este código solo genera hasta el numero diez y luego todos son 10, algo esta fallando y no me he dado cuenta.

Y donde los generas? Lo que haces es cortar y no aumentar...

pepesoft 04-07-2020 03:08:51

Bueno quizás no me deje entender, lo que quiero es incrementar el numero
TPT1
TPT2
TPT3
etc, así sucesivamente.

mamcx 04-07-2020 03:31:41

Para eso debes usar una secuencia y quizas + una función en postgresql.

Código SQL [-]
CREATE SEQUENCE next_tpt;

SELECT CONCAT('TPT-', nextval('next_tpt'))

gatosoft 06-07-2020 18:18:32

Creo que el problema es el typecast

haces un MAX de una cadena de texto... y luego esa cadena la conviertes a entero

Código SQL [-]
MAX(SUBSTR(codigo,4))::integer

tal vez si haces el cast interno, y luego aplicas el max, la respuesta sea otra

Código SQL [-]
MAX(SUBSTR(codigo,4)::integer)


La franja horaria es GMT +2. Ahora son las 01:28:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi