Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Encontrar valor maximo de un texto mixto (https://www.clubdelphi.com/foros/showthread.php?t=86486)

wilcg 19-08-2014 06:04:45

Encontrar valor maximo de un texto mixto
 
hola, quisiera que me ayuden con este problemita.

Quiero generar un codigo autoincremental de un campo varchar, con texto mixto letras y numeros pero para eso quiero encontrar primero el valor mas alto.

C1-N001
C1-N002
C1-N003


estoy intentando con este código pero hay un error

Código SQL [-]
SQL.Text := 'select max(cast(substring(numeracion, 3, length(numeracion)-4) as unsigned)) from ventas';
se supone que este codigo sql toma la cadena de texto y quita los 4 primeros caracteres y los 3 restantes los convierte a int y busca el valor mas alto.

Casimiro Notevi 19-08-2014 10:04:07

¿Para qué base de datos?

duilioisola 19-08-2014 15:21:42

Cita:

Empezado por wilcg (Mensaje 480151)
...hay pero hay un error

¿Cuál? ¿Qué dice el error?

¿Qué base de datos?
¿Lo utilzias como un query o dentro de una trigger o un procedimiento almacenado?

Posibilidad 1:
Te dice que no puede convertirlo a entero: Puede ser que sea porque si quieres quitar 4 caracteres debas utiliar substrin(string, 4, largo). La posición 4 es la 4 y no la 3.
Aunque creo que debería ser desde la posición 5 ya que la cuatro es la primera letra del segundo conjunto de datos (Cn-Cnnn).
También habría que saber si el tercer parámetro se refiere a la posición final o a cuantos caracteres tomar:
substring(c, 5, lenght(c)-5) /* de la quinta posición n caracteres */
substring(c, 5, length(c)) /* de la quinta posicion hasta la posición n */

Posibilidad 2:
No existe la instrucción: Puede ser que no entienda substring o length o alguna otra cosa.

Posibilidad 3:
No existe el campo: Te has equivocado de nombre de campo.

Posibilidad 4:
No existe la tabla: Te has equivocado de nombre de tabla.

Posibilidad ...

wilcg 19-08-2014 16:59:55

Bueno para describir un poco más la consulta.

La base de datos que estoy usando es Posgresql, y la consulta va por medio de un TQuery y con respecto al error es el siguiente: no existe el tipo <<unsigned>>.

¿como quiero que funcione?
Tengo el texto C1-N003 quiero que quite los cuatro primeros caracteres C1-N y de los siguientes tres 003 me seleccione el numero maximo el más alto. para tomar ese numero y generar un nuevo numero que incremente.

ozsWizzard 19-08-2014 18:30:31

Si el prefijo siempre es C1-N el MAX debería valer, ¿no?

cloayza 19-08-2014 22:48:34

Creo que la función substring está mal implementada...

Código SQL [-]
Select Max(Cast(Substring(Numeracion From 4, 3) As Integer)) 
From ventas

De esta forma creo debe funcionar...
Saludos cordiales

duilioisola 20-08-2014 04:45:12

Por un lado el error es claro: no existe unsigned para Postgres. Deberás saber cuales son los tipos admitidos y utilizar uno de ellos.
Mira este link.

De todos modos, yo insisto en que creo que la posición inicial debe ser 5
Código SQL [-]
Select Max(Cast(Substring(Numeracion From 5, 3) As Integer)) 
From ventas

Si la longitud de la parte numerica es fija (3) puedes utilizarlo asi, si es variable, deberás utilizar char_length para calcularla.

En este link tienes información de como se utiliza substring (como digo yo aparentemente) y char_length.

cloayza 20-08-2014 15:11:46

Amigo tienes toda la razón...

Cita:

Empezado por duilioisola (Mensaje 480184)
De todos modos, yo insisto en que creo que la posición inicial debe ser 5

Saludos cordiales

wilcg 20-08-2014 17:40:09

Gracias amigos por sus respuestas y sus aportes.


La franja horaria es GMT +2. Ahora son las 21:53:38.

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