problema con cadena.

30/01/2006 - 00:03 por Daniel G. Samborski | Informe spam
Hola, tengo el siguiente problema.

Tengo un listado varchar de numeros.
en este listado tengo

*1
*2
*3
*4
...
*9

lo que necesito hacer es obtener el ultimo numero y sumarle uno.

*9+1=*10

Hasta allí todo bien, pero el *10 lo ordena abajo del 1 y no me funciona.

*1
*10
*2
*3
*4
...
*9

cuando quiero volver a leer el ultimo lee el *9 repitiendo el *10 y deberia
dar *11

Este es el codigo que utilizo.

declare @codent varchar(50)
select @codent = max(CodProd) from productos where len(CodProd) <= 8 and
substring(codprod,1,1) = '*'
set @Codent=substring(@codent,2,len(@codent)-1)
set @codent=@codent + 1
set @codent = '*' + @codent
if @codent is null
set @codent = '*1'

Como podria corregirlo para que tome el valor mas grande de esa lista, en
este caso el *10 y no el *9
Recuerden que puede ser el *10, *15, etc...Se debe incremetar el numero.


Daniel

Preguntas similare

Leer las respuestas

#1 Salvador Ramos
30/01/2006 - 12:59 | Informe spam
Hola,

Lo que no entiendo es por qué no tienes una columna numérica, sin más, y
tampoco para qué necesitas el '*', si lo que quieres es darle un tratamiento
numérico en vez de alfanumérico.

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)


"Daniel G. Samborski" escribió en
el mensaje news:
Hola, tengo el siguiente problema.

Tengo un listado varchar de numeros.
en este listado tengo

*1
*2
*3
*4
...
*9

lo que necesito hacer es obtener el ultimo numero y sumarle uno.

*9+1=*10

Hasta allí todo bien, pero el *10 lo ordena abajo del 1 y no me funciona.

*1
*10
*2
*3
*4
...
*9

cuando quiero volver a leer el ultimo lee el *9 repitiendo el *10 y
deberia dar *11

Este es el codigo que utilizo.

declare @codent varchar(50)
select @codent = max(CodProd) from productos where len(CodProd) <= 8 and
substring(codprod,1,1) = '*'
set @Codent=substring(@codent,2,len(@codent)-1)
set @codent=@codent + 1
set @codent = '*' + @codent
if @codent is null
set @codent = '*1'

Como podria corregirlo para que tome el valor mas grande de esa lista, en
este caso el *10 y no el *9
Recuerden que puede ser el *10, *15, etc...Se debe incremetar el numero.


Daniel

Respuesta Responder a este mensaje
#2 Daniel G. Samborski
30/01/2006 - 16:24 | Informe spam
Es que necesito guardad tipos distinto de codigos, tanto numericos como
alfanumericos.
En este caso los codigos empiezan con *.

Por el momento lo solucione anteponiendo 0 delante del codigo para que lo
ordene como corresponde, pero no me sirve demasiado ya que es varchar(50) y
puede tener 1 cifra como 8 o mas.
Lo que necesito es saber como obtener el mas grande de la serie.
Como dije en el ejemplo, si tengo *1,*10,*2,*3,*4,*5,*6,*7,*8,*9...Deberia
tomar el *10 para luego sumarle 1 y que me quede en *11 pero me toma el
ultimo de la lista, osea el *9 y eso no me sirve.


Daniel.

"Salvador Ramos" escribió en el
mensaje news:
Hola,

Lo que no entiendo es por qué no tienes una columna numérica, sin más, y
tampoco para qué necesitas el '*', si lo que quieres es darle un
tratamiento numérico en vez de alfanumérico.

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)


"Daniel G. Samborski" escribió en
el mensaje news:
Hola, tengo el siguiente problema.

Tengo un listado varchar de numeros.
en este listado tengo

*1
*2
*3
*4
...
*9

lo que necesito hacer es obtener el ultimo numero y sumarle uno.

*9+1=*10

Hasta allí todo bien, pero el *10 lo ordena abajo del 1 y no me funciona.

*1
*10
*2
*3
*4
...
*9

cuando quiero volver a leer el ultimo lee el *9 repitiendo el *10 y
deberia dar *11

Este es el codigo que utilizo.

declare @codent varchar(50)
select @codent = max(CodProd) from productos where len(CodProd) <= 8 and
substring(codprod,1,1) = '*'
set @Codent=substring(@codent,2,len(@codent)-1)
set @codent=@codent + 1
set @codent = '*' + @codent
if @codent is null
set @codent = '*1'

Como podria corregirlo para que tome el valor mas grande de esa lista, en
este caso el *10 y no el *9
Recuerden que puede ser el *10, *15, etc...Se debe incremetar el numero.


Daniel





Respuesta Responder a este mensaje
#3 Isaias
30/01/2006 - 16:51 | Informe spam
Toma TODO lo que este depues del asterisco y conviertelo a NUMERICO

order by CAST(ubstring(columna 2,len(columna)) AS INT)

¿Funciona?
Saludos
IIslas


"Daniel G. Samborski" escribió:

Hola, tengo el siguiente problema.

Tengo un listado varchar de numeros.
en este listado tengo

*1
*2
*3
*4

*9

lo que necesito hacer es obtener el ultimo numero y sumarle uno.

*9+1=*10

Hasta allí todo bien, pero el *10 lo ordena abajo del 1 y no me funciona.

*1
*10
*2
*3
*4

*9

cuando quiero volver a leer el ultimo lee el *9 repitiendo el *10 y deberia
dar *11

Este es el codigo que utilizo.

declare @codent varchar(50)
select @codent = max(CodProd) from productos where len(CodProd) <= 8 and
substring(codprod,1,1) = '*'
set @Codent=substring(@codent,2,len(@codent)-1)
set @codent=@codent + 1
set @codent = '*' + @codent
if @codent is null
set @codent = '*1'

Como podria corregirlo para que tome el valor mas grande de esa lista, en
este caso el *10 y no el *9
Recuerden que puede ser el *10, *15, etc...Se debe incremetar el numero.


Daniel



Respuesta Responder a este mensaje
#4 Daniel G. Samborski
30/01/2006 - 17:39 | Informe spam
Le agregue el order by al select pero me tira un error.

esto es lo que le agregue al select

select @codent = max(CodProd) from productos where len(CodProd) <= 8 and
substring(codprod,1,1) = '*'
order by CAST(substring(codprod,2,len(codprod)) AS INT) /* Este es el order
by que me sugeriste */

Este es el error.

Server: Msg 8126, Level 16, State 1, Line 3
Column name 'productos.CodProd' is invalid in the ORDER BY clause because it
is not contained in an aggregate function and there is no GROUP BY clause.
Server: Msg 8126, Level 16, State 1, Line 3
Column name 'productos.CodProd' is invalid in the ORDER BY clause because it
is not contained in an aggregate function and there is no GROUP BY clause.


Daniel.

"Isaias" escribió en el mensaje
news:
Toma TODO lo que este depues del asterisco y conviertelo a NUMERICO

order by CAST(ubstring(columna 2,len(columna)) AS INT)

¿Funciona?
Saludos
IIslas


"Daniel G. Samborski" escribió:

Hola, tengo el siguiente problema.

Tengo un listado varchar de numeros.
en este listado tengo

*1
*2
*3
*4

*9

lo que necesito hacer es obtener el ultimo numero y sumarle uno.

*9+1=*10

Hasta allí todo bien, pero el *10 lo ordena abajo del 1 y no me funciona.

*1
*10
*2
*3
*4

*9

cuando quiero volver a leer el ultimo lee el *9 repitiendo el *10 y
deberia
dar *11

Este es el codigo que utilizo.

declare @codent varchar(50)
select @codent = max(CodProd) from productos where len(CodProd) <= 8 and
substring(codprod,1,1) = '*'
set @Codent=substring(@codent,2,len(@codent)-1)
set @codent=@codent + 1
set @codent = '*' + @codent
if @codent is null
set @codent = '*1'

Como podria corregirlo para que tome el valor mas grande de esa lista, en
este caso el *10 y no el *9
Recuerden que puede ser el *10, *15, etc...Se debe incremetar el numero.


Daniel



Respuesta Responder a este mensaje
#5 Isaias
30/01/2006 - 18:25 | Informe spam
Coloca tambien la CONVERSION en el SELECT

SELECT CAST(substring(codprod,2,len(codprod)) AS INT) .
FROM.
ORDER BY CAST(substring(codprod,2,len(codprod)) AS INT)


Saludos
IIslas


"Daniel G. Samborski" escribió:

Le agregue el order by al select pero me tira un error.

esto es lo que le agregue al select

select @codent = max(CodProd) from productos where len(CodProd) <= 8 and
substring(codprod,1,1) = '*'
order by CAST(substring(codprod,2,len(codprod)) AS INT) /* Este es el order
by que me sugeriste */

Este es el error.

Server: Msg 8126, Level 16, State 1, Line 3
Column name 'productos.CodProd' is invalid in the ORDER BY clause because it
is not contained in an aggregate function and there is no GROUP BY clause.
Server: Msg 8126, Level 16, State 1, Line 3
Column name 'productos.CodProd' is invalid in the ORDER BY clause because it
is not contained in an aggregate function and there is no GROUP BY clause.


Daniel.

"Isaias" escribió en el mensaje
news:
> Toma TODO lo que este depues del asterisco y conviertelo a NUMERICO
>
> order by CAST(ubstring(columna 2,len(columna)) AS INT)
>
> ¿Funciona?
> Saludos
> IIslas
>
>
> "Daniel G. Samborski" escribió:
>
>> Hola, tengo el siguiente problema.
>>
>> Tengo un listado varchar de numeros.
>> en este listado tengo
>>
>> *1
>> *2
>> *3
>> *4
>>
>> *9
>>
>> lo que necesito hacer es obtener el ultimo numero y sumarle uno.
>>
>> *9+1=*10
>>
>> Hasta allí todo bien, pero el *10 lo ordena abajo del 1 y no me funciona.
>>
>> *1
>> *10
>> *2
>> *3
>> *4
>>
>> *9
>>
>> cuando quiero volver a leer el ultimo lee el *9 repitiendo el *10 y
>> deberia
>> dar *11
>>
>> Este es el codigo que utilizo.
>>
>> declare @codent varchar(50)
>> select @codent = max(CodProd) from productos where len(CodProd) <= 8 and
>> substring(codprod,1,1) = '*'
>> set @Codent=substring(@codent,2,len(@codent)-1)
>> set @codent=@codent + 1
>> set @codent = '*' + @codent
>> if @codent is null
>> set @codent = '*1'
>>
>> Como podria corregirlo para que tome el valor mas grande de esa lista, en
>> este caso el *10 y no el *9
>> Recuerden que puede ser el *10, *15, etc...Se debe incremetar el numero.
>>
>>
>> Daniel
>>
>>
>>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida