Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-08-2014
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 10
wilcg Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 19-08-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Para qué base de datos?
Responder Con Cita
  #3  
Antiguo 19-08-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Cita:
Empezado por wilcg Ver Mensaje
...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 ...

Última edición por duilioisola fecha: 19-08-2014 a las 15:26:20.
Responder Con Cita
  #4  
Antiguo 19-08-2014
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 10
wilcg Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 19-08-2014
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
Si el prefijo siempre es C1-N el MAX debería valer, ¿no?
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #6  
Antiguo 19-08-2014
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
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
Responder Con Cita
  #7  
Antiguo 20-08-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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.

Última edición por duilioisola fecha: 20-08-2014 a las 04:50:44.
Responder Con Cita
  #8  
Antiguo 20-08-2014
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Amigo tienes toda la razón...

Cita:
Empezado por duilioisola Ver Mensaje
De todos modos, yo insisto en que creo que la posición inicial debe ser 5
Saludos cordiales
Responder Con Cita
  #9  
Antiguo 20-08-2014
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 10
wilcg Va por buen camino
Gracias amigos por sus respuestas y sus aportes.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Valor maximo de un campo jafera Firebird e Interbase 4 25-10-2013 19:08:39
maximo valor de un subconjunto de datos TrUnkS SQL 1 07-10-2010 18:21:20
valor maximo del autoincrement anubis Tablas planas 2 16-07-2007 07:04:32
consultar el maximo valor beatriz g SQL 4 16-08-2006 17:35:53
consulta con Valor maximo isc_hilda SQL 3 29-04-2004 22:17:20


La franja horaria es GMT +2. Ahora son las 14:59:36.


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
Copyright 1996-2007 Club Delphi