Foros del Web » Programando para Internet » ASP Clásico »

Eliminar caracteres de una cadena y Usar el Like en una búsqueda sobre campo numerico

Estas en el tema de Eliminar caracteres de una cadena y Usar el Like en una búsqueda sobre campo numerico en el foro de ASP Clásico en Foros del Web. Muy wenas a tod@s!! Tengo una cadena a la que le quiero quitar los ultimos 4 caracteres. Estos caracteres siempre van a ser los mismos ...
  #1 (permalink)  
Antiguo 17/07/2003, 04:58
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Eliminar caracteres de una cadena y Usar el Like en una búsqueda sobre campo numerico

Muy wenas a tod@s!! Tengo una cadena a la que le quiero quitar los ultimos 4 caracteres. Estos caracteres siempre van a ser los mismos " OR " Hay alguna forma de hacerlo?? xq el trim solo elimina los espacios, verdad?? Que puedo hacer para quitar ese trozo de la cadena???Muchas gracias por adelantado, salu2
__________________
Vayamos por Partes :: Jack el Destripador

Última edición por angel_dope; 18/07/2003 a las 01:54
  #2 (permalink)  
Antiguo 17/07/2003, 05:03
 
Fecha de Ingreso: marzo-2001
Ubicación: Gran Canaria
Mensajes: 381
Antigüedad: 23 años, 3 meses
Puntos: 2
jejejje, seguro que se exactamente por qu equieres quitar ese " OR ".....los programadores estamos hechos por el mismo molde


cadena = Left(cadena,Len(cadena)-4)


ToKaTa.
__________________

"Si pudieras volver.....¿.lo harias?"
  #3 (permalink)  
Antiguo 17/07/2003, 05:17
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Jejeje, a ver si es lo q tu pensabas. Me pasan varios parametros desde un form q tiene una lista en la q se pueden elegir varias opciones, y para hacer la busqueda voy haciendo la select en un bucle, pero lo ponga como lo ponga, al final siempre sobra algo en algun sitio, jejej:

Código PHP:
actividad split(Request.form("actividad"),",")
    
Set rs_actividad=createobject("ADODB.Recordset")
    
rs_actividad.cursortype AdOpenKeyset
    rs_actividad
.LockType AdLockOptimistic
    sql_actividad 
"Select * From ActividadGeneral Where "
    
For i=0 to ubound(actividad)
        
sql_actividad sql_actividad "codigo like " actividad(i) &"% OR "
    
next 
Aunq ahora stoy ante otro problema Resulta que la busqueda la hago sobre un campo numérico y lo que quiero es q si me pasan un 3, quiero todos los que empiezen por 3 (3, 31,32,325,366,3121..) pero al no ser texto, no me deja aplicarle el Like 3%
Hay alguna forma de hacer lo que quiero???
__________________
Vayamos por Partes :: Jack el Destripador
  #4 (permalink)  
Antiguo 17/07/2003, 05:39
 
Fecha de Ingreso: marzo-2001
Ubicación: Gran Canaria
Mensajes: 381
Antigüedad: 23 años, 3 meses
Puntos: 2
fuahhh...pues lo veo realmente jodido.....solo se me ocurren chapuzas en plan duplicar la coumna y ponerla como texto......pero vamos.......no se me ocurre nada de nada.......por que como encima no se pueden aplicar operacion sobre el campo en la parte del where......


sigo pensando...pero por ahora.....mu mal...





ToKaTa.
__________________

"Si pudieras volver.....¿.lo harias?"
  #5 (permalink)  
Antiguo 17/07/2003, 05:45
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Lo de duplicar la columna y ponerla como texto tampoco lo puedo hacer por que es una tabla vinculada que viene de la base de datos de empresas que tenemos, y esa es intocable. Si tocase algo ahi, los programas de gestion podrian trastocarse
__________________
Vayamos por Partes :: Jack el Destripador
  #6 (permalink)  
Antiguo 17/07/2003, 05:59
 
Fecha de Ingreso: marzo-2001
Ubicación: Gran Canaria
Mensajes: 381
Antigüedad: 23 años, 3 meses
Puntos: 2


pues no se, haz un select de todos los codigos (supniendo que no te vaya a devolver 1500000 registros) y luegos los tratas en tu script como cadena y tomando o quitando los que te hagan falta

Esta es una solucion relativamente buena si el query no te va a devolver demasiados registros....aquneu bueno...si lo unico que vas a sacar son los codigos...tampoco creo que sea tanta carga para el gestor de bd...




ToKaTa.
__________________

"Si pudieras volver.....¿.lo harias?"
  #7 (permalink)  
Antiguo 17/07/2003, 06:00
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 3 meses
Puntos: 2
increíble colegas!

he entrado a Foros del web para poner exactamente la misma consulta que el amigo angel_dope , y este post era el último que se había enviado.

Yo necesitaba eliminar los dos últimos caracteres de una cadena con el fin de eliminar los decimales de una cifra después de multiplicarla por 100.

Para ello, me ha valido la solución de ToKaTa. Gracias, y ¡larga vida a los Foros del Web!
  #8 (permalink)  
Antiguo 17/07/2003, 06:11
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
La tabla tiene 101 registros nada más, asi que por lo d la carga no pasaria nada, pero como lo haria??? Tengo que hacer lo siguiente: sacar de la tabla ActGenEmpresas, aquellas actividades que tengan el mismo codigo, o subcodigo (los q empiezan = q el anterior), que coincidan con las actividades que hayan elegido en la pagina anterior, pillando su código, y el codigoempresa. Despues de eso tengo que escribir todo el recordset en otra tabla temporal ya creada. Lo de escribir en la temporal está claro, pero no se como hacer lo que tu dices, recorrer toda la tabla, pillar los código, pasarlos a texto y despues volver a buscar los que me interesan, alguna ayudita???
Por cierto, habias acertado con la razon por la que queria quitar los ultimos caracteres???
__________________
Vayamos por Partes :: Jack el Destripador
  #9 (permalink)  
Antiguo 17/07/2003, 06:27
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
X cierto, macabo de dar cuenta de que no son 101 registros, esa es la tabla desde la cual lleno la lista en la página previa, sobre la que tengo buscar despues tiene 16.600 registros no macordaba de que despues tenia que trabajar con esta, habra problemas???
__________________
Vayamos por Partes :: Jack el Destripador
  #10 (permalink)  
Antiguo 17/07/2003, 07:39
 
Fecha de Ingreso: marzo-2001
Ubicación: Gran Canaria
Mensajes: 381
Antigüedad: 23 años, 3 meses
Puntos: 2
No tengo muy claro si entendi, asi que te explico lo que hace este codigo que te paso y ya ves si te srive o hay que modificarlo.

-Llegan una serie de valores que metemos en un vector (vectorActividad)
-Hacemos un select de la tabla ActGenEmpresas sin poner condiciones. De este select sacamos solo el campo codigo de TODOS los registros
-Luego, para cada codigo obtenido del codigo, lo convertimos en cadena y vemos cual es el primer caracter de esa cadena (primeraLetraCodigo)
-hacemos un bucle para ver si esa letra primera del codigo esta entre las que se supone que debemos listar (o sea, las codigos de actividad que tenemos guardados en el vector)
-Si no lo es el bucle coge el siguiente codigo y hace lo mismo
-Si es un codigo de los que buscamos, pues llamamos a una funcion que utilizad el codigo de ese registro (se lo pasamos como parametro) para copiar el resgistro en la tabla temporal que mencionas

Código:
<%

	vectorActividad = split("3,12,16,1",",")

	Set rs_actividad=createobject("ADODB.Recordset")
	rs_actividad.cursortype = 3
	rs_actividad.LockType = 2

	sql_actividad = "Select codigo From ActGenEmpresas"
	rs_actividad.open sql_actividad,"DSN=prueba"



	do while (not rs_actividad.eof)
	
		primeraLetraCodigo = Left(CStr(rs_actividad.fields("codigo")),1)
		
		encontrado = 0
		i = 0
		
		'utilizo un while en vez de un for por que el for me obliga a recorrer todo el 
		'vector, mientras que con el while optimizamos velocidad saliendo del bucle
		'cuando la la condicion de encontrado=1
		do while (CInt(i) <= CInt(Ubound(vectorActividad)))

			if (CSTr(primeraLetraCodigo) = CSTr(vectorActividad(i))) then
				encontrado = 1
			end if

			i = i + 1
		loop

		if (CInt(encontrado) = 1) then
			'Aqui llama a una funcion que tendras hecha que lo que hace es copiar
			'el registro, cuyo codigo es el que le pasas, en la tabla temporal esa que 
			'mencionas
			'copiaRegistroATablaTemp(rs_actividad.fields("codigo"))
			response.write "<br>Este si vale"&rs_actividad.fields("codigo")
		end if
			
		rs_actividad.moveNext
	loop	
		
%>
Con 100 registros no hay problema.........pero bueno, con 16000 no lo se, es cuestion de probar pa ver si va lento....no te lo puedo decir por que no suelo trabajar con tablas "tan grandes"......si otro forero a trabajado a este nivel quizas te pueda orientar en la velocidad de ejecucion....


ToKaTa.


P.D.: sip, basicamente si acerte con lo de los caracteres , somos tos iguales
__________________

"Si pudieras volver.....¿.lo harias?"
  #11 (permalink)  
Antiguo 17/07/2003, 09:41
Avatar de AlexNV  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 289
Antigüedad: 21 años
Puntos: 1
Esto funciona en SQL Server.
Si es otro sistema, busca las funciones agregadas que le correspondan.

SELECT STR(codigo) FROM ACTIVIDADES WHERE LTRIM(STR(codigo)) LIKE '3%'
  #12 (permalink)  
Antiguo 17/07/2003, 10:23
 
Fecha de Ingreso: marzo-2001
Ubicación: Gran Canaria
Mensajes: 381
Antigüedad: 23 años, 3 meses
Puntos: 2







ToKaTa.
__________________

"Si pudieras volver.....¿.lo harias?"
  #13 (permalink)  
Antiguo 17/07/2003, 10:28
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
me parece que la solución es mucho más simple.
Si te pasan un 3 y querés que devuelva los enteros y los que tienen decimales, entonces estás haciendo una consulta por los ">= 3 AND < 4"

O sea que debería quedar más o menos así (cuidado que no estoy verificando que sea correcto):



sql_actividad = "Select * From ActividadGeneral Where "
For i=0 to ubound(actividad)
sql_actividad = sql_actividad & "codigo >= " & actividad(i) & " AND codigo < " & actividad(i) - 1 & " OR "
next
  #14 (permalink)  
Antiguo 17/07/2003, 10:35
 
Fecha de Ingreso: marzo-2001
Ubicación: Gran Canaria
Mensajes: 381
Antigüedad: 23 años, 3 meses
Puntos: 2


no entendi. Si por ejemplo un codigo de actividad pasada es el 3, no entiendo como ese query va a devolver como validos valores como:

3
39
3476
398736







ToKaTa.
__________________

"Si pudieras volver.....¿.lo harias?"
  #15 (permalink)  
Antiguo 17/07/2003, 11:21
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Cita:
quiero todos los que empiezen por 3 (3, 31,32,325,366,3121..)

Leí mal esa parte

Olvidalo. En realidad interpreté que querías por ejemplo los números:

3
3,1
3,5
3,69
3,9999


la gripe me tiene más o menos así:
  #16 (permalink)  
Antiguo 18/07/2003, 01:53
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Cita:
SELECT STR(codigo) FROM ACTIVIDADES WHERE LTRIM(STR(codigo)) LIKE '3%'
Perfecto, con esto funciona, pero por que hay que ponerle el Ltrim??? Eso es para quitar espacios a la izquierda si no recuerdo mal, no??? He probado y si le quito eso no saca nada, asi q supongo que de algun sitio se sacar los blancos Weno, muchas gracias a todos, me ha venido de perlas. Ya seguiré dando el coñazo con el proximo problema que se me presente y seguro que será dentro de poco
Gracias a todos de nuevo
__________________
Vayamos por Partes :: Jack el Destripador
  #17 (permalink)  
Antiguo 18/07/2003, 02:50
Avatar de AlexNV  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 289
Antigüedad: 21 años
Puntos: 1
Pues no tiene mucho sentido, pero le mete espacios por la izquierda, por eso se usa el LTRIM, porque le quita esos espacios.
De todas formas, cuando no sepas que te está devolviendo le puedes hacer un
SELECT '|' + STR(CODIGO) + '|' FROM TABLA
y así ves si te ha metido espacios por la izda, dcha, o donde sea. No sé por qué, pero hay funciones agregadas que a veces son impredecibles.

Me alegro de que te funcione.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:35.