Ver la Versión Completa : SQL pregunta como truncar o quitar de un varchar
b-jack-b
26-12-2007, 13:35:56
Buenos Dias a todos esperando que hallan pasado felices fiestas!!
Tengo una Pregunta SQL
tengo un campo que es un codigo ej: 474-858-18M y lo que quiero hacer es quitar todo lo que este antes del ultimo guion en este caso seria "-18M" para que al final tenga 474-858.
lo que esta al final puede variar de tamaño por ejemplo puede ser "-18M" o "-587ST"
lo que quiero es quitar todo lo que este antes del ultimo guion incluyendo el guion
COMO SIEMPRE AGRADECIENDO POR SU AYUDA
manglio
26-12-2007, 13:52:42
seria mas facil si dijeras en que lenguaje estas programando y que base de datos estas usando (SQL SERVER, oracle, etc)
b-jack-b
26-12-2007, 13:55:43
sql server.. y visual basic net 2005 pero lo unico que quiero como quitar lo que esta despues del guion en el query!!
manglio
26-12-2007, 14:08:03
sql server.. y visual basic net 2005 pero lo unico que quiero como quitar lo que esta despues del guion en el query!!
tons la tenes facil, usa la funcion split de vb
usas un split de tu variable y luego concatenas las dos primeras partes de la cadena y ya, el split guarda en un array los elementos que resultan de desarmar tu variable con el caracter de separacion, en tu caso seria darle split por el guion "-"
creo que podes hacerlo mas paja todavia via la base de datos pero no tengo instalado sql server para dar un par de tiritos
voy a hartar ahorita, si no te pondria un par de ejemplitos
espero te haya servido de algo
b-jack-b
26-12-2007, 14:21:20
tons la tenes facil, usa la funcion split de vb
usas un split de tu variable y luego concatenas las dos primeras partes de la cadena y ya, el split guarda en un array los elementos que resultan de desarmar tu variable con el caracter de separacion, en tu caso seria darle split por el guion "-"
creo que podes hacerlo mas paja todavia via la base de datos pero no tengo instalado sql server para dar un par de tiritos
voy a hartar ahorita, si no te pondria un par de ejemplitos
espero te haya servido de algo
la verdad en net si lo puedo hacer!! lo necesito hacer en un select en sql en el qry
mira en el codigo "854-525-18M" en la base el "18M" representa una talla de ropa lo que necesito es quitar la talla del codigo y luego hacer un "group by codigo" para que me agrupe todas las tallas por ese codigo no c si me explico bien osea necesito hacerlo en sql
b-jack-b
26-12-2007, 14:25:45
MANGLIO o otra forma de hacerlo seria saber en que pocicion se encuentra el segun guion?? no se si sabes como hacerlo dentro del qry??
danielmoc
26-12-2007, 14:32:31
aqui esta lo que necesitas
SELECT campobuscar,SUBSTR(campobuscar,INSTR(campobuscar,'-',1,2),10) FROM base_de_prueba
campobuscar: aqui pones el nombre de tu campo
base_de_prueba: la tabla de la que vas a hacer el query
INSTR(campobuscar,'-',1,2),10)
el 1,2 te sirve para buscar la segunda coincidencia,
el 10 lo puse para jalar los 10 caracteres restantes. :si:
b-jack-b
26-12-2007, 15:14:55
VOS ME DA ESTE ERROR?? 'INSRT' is not a recognized function name.
danielmoc
26-12-2007, 15:18:08
no te aguanta la funcion :rvm:
yo lo probe en una base de oracle :b6: (hice el query y si funciono)
mira en esta pagina, talvez encontras algo
http://www.java2s.com/Code/Oracle/Char-Functions/CombineINSTRandSUBSTRtogether.htm
b-jack-b
26-12-2007, 15:20:55
esa funcion INSRT es tambien para sql??
Rsolorzano
26-12-2007, 15:33:37
selectleft(TUCampo,2),right(TuCampo,2),substring(T uCampo,1,4),TuCAmpo from tuTabla
-----
donde la funcion left te devuelve los dos caracteres de izquierda de tu campo
donde la funcion Right de devuelve los dos caracteres dela derecha de tu campo
donde substring te devuelve segun tus parametros de la posicion 1 y 4 caracteres de tu campo
Revisa este query y me contas..
b-jack-b
26-12-2007, 15:45:00
selectleft(TUCampo,2),right(TuCampo,2),substring(T uCampo,1,4),TuCAmpo from tuTabla
mira por ejemplo estos son codigos de ropa
184-858-3M
184-858-13S
184-858-RT
184-858-18M
Del ultimo guion para la derecha es el codigo de la talla si se hace un group by de la sin la talla voy a obtener solamente un registro que es lo que quiero el problema es que los codigos cambian
184-858-18M
245-4874-3M
por ejmplo estos dos el primero tiene 3 digitos en medio y el segundo 4 tons lo que yo necesito es quitarte lo que esta del segundo guion para la derecha!!
Rsolorzano
26-12-2007, 15:52:03
puta esa tu db no esta normalizada tons.
b-jack-b
26-12-2007, 15:53:38
puta esa tu db no esta normalizada tons.
la mierda es que ya tiene como 50,000 registros y la usan varias empresas tons no puedo cambiar nada
Rsolorzano
26-12-2007, 15:53:40
por lo visto , si no estoy mal tenes dentro del codigo del producto la talla,
y esta puede variar de tamaño, puede ser de 3,4,2 caracteres.
b-jack-b
26-12-2007, 15:59:26
por lo visto , si no estoy mal tenes dentro del codigo del producto la talla,
y esta puede variar de tamaño, puede ser de 3,4,2 caracteres.
mira el codigo indica la clasificacion del inventario, y otro monton de muladas pero la ultima parte es la talla lo unico que quiero hacer es quitar la ultima parte de que otra manera se te ocurre hacerlo
Rsolorzano
26-12-2007, 16:31:52
Declare @Filtro varchar(5)
set @Filtro ='-3M'-- este es el parametro que necesitas pasar.
declare @Tabla astable
(
CodigoProducto varchar(20)
)
insert @Tabla values('184-858-3M')
insert @Tabla values('184-858-13S')
insert @Tabla values('184-858-RT')
insert @Tabla values('184-858-18M')
insert @Tabla values('184-858-18M')
insert @Tabla values('245-4874-3M')
select CodigoProducto,
--CHARINDEX('-3M',CodigoProducto),-- Te devuleve la posision donde encuentra el texto requerido.
left(CodigoProducto,CHARINDEX(@Filtro,CodigoProduc to)-1)from @Tabla
whereCHARINDEX(@Filtro,CodigoProducto)> 0
Rsolorzano
26-12-2007, 16:32:05
mira este codigo que te publique
b-jack-b
26-12-2007, 16:48:08
mira este codigo que te publique
GRACIAS VOS CON ESO ME TOME LA IDEA Y...
declare @Tabla table
(
CodigoProducto varchar(20)
)
insert @Tabla values('184-858-3M')
insert @Tabla values('184-858-13S')
insert @Tabla values('184-858-RT')
insert @Tabla values('184-858-18M')
insert @Tabla values('184-858-18M')
insert @Tabla values('245-4874-3M')
select CodigoProducto,
left(CodigoProducto, len(CodigoProducto) - CHARINDEX('-', reverse( CodigoProducto) ) ) CodigoResultante, CodigoProducto from @Tabla
funciona para culaquier codigo!!
DEBERAS DE AGRADESCO UN MONTON :si::si:
Dinho
26-12-2007, 16:55:52
:lock:
ericdiaz
26-12-2007, 17:52:35
:lock:
Y porque queres que lo cierren, si ni siquiera diste una solucion, se nota que solo queres aumentar la cantidad de post verdad, haaa la mara sela lleva de cabrona y no sabe ni miel
manglio
26-12-2007, 19:36:28
GRACIAS VOS CON ESO ME TOME LA IDEA Y...
declare @Tabla table
(
CodigoProducto varchar(20)
)
insert @Tabla values('184-858-3M')
insert @Tabla values('184-858-13S')
insert @Tabla values('184-858-RT')
insert @Tabla values('184-858-18M')
insert @Tabla values('184-858-18M')
insert @Tabla values('245-4874-3M')
select CodigoProducto,
left(CodigoProducto, len(CodigoProducto) - CHARINDEX('-', reverse( CodigoProducto) ) ) CodigoResultante, CodigoProducto from @Tabla
funciona para culaquier codigo!!
DEBERAS DE AGRADESCO UN MONTON :si::si:
buena onda que encontraste la solucion, pero tiene razon rsolorzano, si pensas optimizar la bd seria bueno que hagas un buen refactoring y normalices la data, asi mas faciles los queries, mas facil mantenimiento y menor desperdicio de disco
b-jack-b
27-12-2007, 10:45:51
buena onda que encontraste la solucion, pero tiene razon rsolorzano, si pensas optimizar la bd seria bueno que hagas un buen refactoring y normalices la data, asi mas faciles los queries, mas facil mantenimiento y menor desperdicio de disco
lo que pasa es que esta aplicacion la usan un monton de empresas y cada empresa usa sus codigos!! entoces en ese aspectos no se pueden normalizar porque vos sabes que es dificil que una empresa cambie los codigos de sus productos cuando los llevan usando mil años y cuando compran la amplicacion lo que quieren es seguir usando sus codigos que todos los bodegueros ya saben!!!
Dinho
27-12-2007, 10:52:53
Y porque queres que lo cierren, si ni siquiera diste una solucion, se nota que solo queres aumentar la cantidad de post verdad, haaa la mara sela lleva de cabrona y no sabe ni miel
:iogay: no significa cerrar vos, perdon si yo no lo puse bien, pero significo caso solucionado :cheebs:
b-jack-b
27-12-2007, 11:10:55
:iogay: no significa cerrar vos, perdon si yo no lo puse bien, pero significo caso solucionado :cheebs:
hahaha ud. no se ahueve hombre!!! jajajaj :hola:
Rsolorzano
27-12-2007, 11:14:05
?? y fuck?
que paso te sirvio el codigo?
ayer no pude conectarme en la tarde que pasiones..
de todas formas a sus ordenes muchas.
b-jack-b
27-12-2007, 11:29:54
?? y fuck?
que paso te sirvio el codigo?
ayer no pude conectarme en la tarde que pasiones..
de todas formas a sus ordenes muchas.
fijate vos que le hice unas pequeñas modificaciones y me jalo de ahuevo gracias!!!!!
GUALHERO
27-12-2007, 12:15:30
Que buena onda por las respuestas, por aquel de plano chilero que solucionó su clavo, y yo también aprendí :si:
b-jack-b
27-12-2007, 12:36:02
Que buena onda por las respuestas, por aquel de plano chilero que solucionó su clavo, y yo también aprendí :si:
:hi5: simon yo creo que todos aprendimos... yo un monton!!
Dinho
27-12-2007, 13:28:45
:hi5: simon yo creo que todos aprendimos... yo un monton!!
= yo x1000 buena solucion
vBulletin v3.6.11, Derechos ©2000-2008, Jelsoft Enterprises Ltd.