Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

extraer solo lo que esta dentro de los parentesis

Estas en el tema de extraer solo lo que esta dentro de los parentesis en el foro de SQL Server en Foros del Web. Hola gente buenas tardes! Tengo un problema al querer seleccionar solo la informacion que se encuentra dentro de parentesis, ejemplo: campo calle Aristobulo del Valle ...
  #1 (permalink)  
Antiguo 20/04/2011, 14:26
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta extraer solo lo que esta dentro de los parentesis

Hola gente buenas tardes!

Tengo un problema al querer seleccionar solo la informacion que se encuentra dentro de parentesis, ejemplo:

campo calle

Aristobulo del Valle (puerta azul) 522

Todo lo que quiero es tomar la parte que esta dentro de los parentesis "puerta azul"

El problema es que no todos los parentesis se encuentran en la misma ubicacion, algun ejemplo para probar???

Muchas gracias por su colaboracion!

Saludos
  #2 (permalink)  
Antiguo 20/04/2011, 14:59
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: extraer solo lo que esta dentro de los parentesis

Prueba con un ejemplo como este :)

Código SQL:
Ver original
  1. DECLARE @inicio INT
  2. DECLARE @fin INT
  3.  
  4. SELECT @inicio=charindex('(','Aristobulo del Valle (puerta azul) 522',0)
  5. SELECT @fin=charindex(')','Aristobulo del Valle (puerta azul) 522',0)
  6.  
  7. SELECT SUBSTRING('Aristobulo del Valle (puerta azul) 522',@inicio+1,(@fin-@inicio)-1)

Este ejemplo te srive para cualquier texto y te regresa lo que este entre parentesis :)

Saludos!!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 25/04/2011, 07:36
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Respuesta: extraer solo lo que esta dentro de los parentesis

Cita:
Iniciado por Libras Ver Mensaje
Prueba con un ejemplo como este :)

Código SQL:
Ver original
  1. DECLARE @inicio INT
  2. DECLARE @fin INT
  3.  
  4. SELECT @inicio=charindex('(','Aristobulo del Valle (puerta azul) 522',0)
  5. SELECT @fin=charindex(')','Aristobulo del Valle (puerta azul) 522',0)
  6.  
  7. SELECT SUBSTRING('Aristobulo del Valle (puerta azul) 522',@inicio+1,(@fin-@inicio)-1)

Este ejemplo te srive para cualquier texto y te regresa lo que este entre parentesis :)

Saludos!!!
Muy bueno Libras! al parecer funciona bien, pero supongamos que tengo que actualizar toda la columna y desconozco el contenido de cada celda, como puedo hacer para actualizar dicha columna?
  #4 (permalink)  
Antiguo 25/04/2011, 07:44
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: extraer solo lo que esta dentro de los parentesis

Pues de esta manera

declare @inicio int
declare @fin int

SELECT @inicio=charindex('(',cadena,0) from tabla
SELECT @fin=charindex(')',cadena,0) from tabla

update tabla
set
cadena=t1.cadena
from
(
SELECT substring(cadena,@inicio+1,(@fin-@inicio)-1) from tabla
) as t1




Seria algo asi :)

Saludos!!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 25/04/2011, 08:22
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Respuesta: extraer solo lo que esta dentro de los parentesis

Perdon Libras pero la consulta parece ser logica pero no entiendo el siquiente error que me indica el Cliente Sql:

Msg 8155, Level 16, State 2, Line 12
No column name was specified for column 1 of 't1'.


Es por que no esta declarado?

Gracias!
  #6 (permalink)  
Antiguo 25/04/2011, 08:36
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: extraer solo lo que esta dentro de los parentesis

Con el permiso de Libras

A este SELECT, colocale un ALIAS

SELECT substring(cadena,@inicio+1,(@fin-@inicio)-1) AS Cadena from tabla
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 25/04/2011, 09:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: extraer solo lo que esta dentro de los parentesis

Cita:
Iniciado por iislas Ver Mensaje
Con el permiso de Libras

A este SELECT, colocale un ALIAS

SELECT substring(cadena,@inicio+1,(@fin-@inicio)-1) AS Cadena from tabla
Muy cierto iislas, se me paso ponerle un Alias al campo de la tabla jejeje :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 25/04/2011, 09:19
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Respuesta: extraer solo lo que esta dentro de los parentesis

Probe con el Alias que me recomendaste iislas pero al parecer hay un problema en el substring o con el largo de alguna cadena:


Msg 537, Level 16, State 2, Line 7
Invalid length parameter passed to the LEFT or SUBSTRING function.
  #9 (permalink)  
Antiguo 25/04/2011, 09:24
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: extraer solo lo que esta dentro de los parentesis

el campo tiene '(' y ')'???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 25/04/2011, 09:29
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Respuesta: extraer solo lo que esta dentro de los parentesis

Si, tienen " Y " pero no en los casos que tienen parentesis que es justamente los que estamos viendo!
  #11 (permalink)  
Antiguo 25/04/2011, 09:57
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: extraer solo lo que esta dentro de los parentesis

que si todos tus campos tienen parentesis esa era mi pregunta :P ya que si falta alguno de los parentesis no sirve la funcion....

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 25/04/2011, 10:00
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: extraer solo lo que esta dentro de los parentesis

jajajaja! no vi las comillas simples en los () jaja!
Hay casos en los que se encuentra solo '(' y no cierra, en otros casos no hay parentesis de ningun tipo y en otros abren y cierran '(' y ')'
  #13 (permalink)  
Antiguo 25/04/2011, 10:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: extraer solo lo que esta dentro de los parentesis

a bueno, cuando no encuentra los parentesis que abren o que cierran entonces es cuando marca ese error, entonces habria que modificar la funcion para esos casos :)

Provemos con esto :)
Código SQL:
Ver original
  1. DECLARE @inicio INT
  2. DECLARE @fin INT
  3.  
  4. SELECT @inicio=isnull(charindex('(','mi casa esta hasta por aca (puerta azulada y que mas quieres que diga) mas texto por aca',0),0)
  5. SELECT @fin=isnull(charindex(')','mi casa esta hasta por aca puerta azulada y que mas quieres que diga mas texto por aca',0),0)
  6.  
  7. IF @inicio>=1 AND @fin>=1
  8. BEGIN
  9.    SELECT SUBSTRING('mi casa esta hasta por aca (puerta azulada y que mas quieres que diga) mas texto por aca',@inicio+1,(@fin-@inicio)-1)
  10. END
  11. ELSE
  12.    print 'no tiene parentesis ya sea que abre o que cierra o no tiene ninguno'

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #14 (permalink)  
Antiguo 25/04/2011, 10:54
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: extraer solo lo que esta dentro de los parentesis

Libras! te parecera demaciado rustico lo mio pero no comprendo cual es la sintaxis donde dices por ejemplo :

'mi casa esta hasta por aca (puerta azulada y que mas quieres que diga) mas texto por aca'

'mi casa esta hasta por aca puerta azulada y que mas quieres que diga mas texto por aca'

'mi casa esta hasta por aca (puerta azulada y que mas quieres que diga) mas texto por aca'


'no tiene parentesis ya sea que abre o que cierra o no tiene ninguno'

  #15 (permalink)  
Antiguo 25/04/2011, 11:46
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: extraer solo lo que esta dentro de los parentesis

Lo que hace el codigo que te puse es presentar un mensaje cuando falta alguno de los parentesis ya sea el que abre "(" o el que cierra ")" o cuando no tiene ninguno, por lo que si no tiene los 2 no saca la frase que esta entre parentesis y presenta el mensaje del final :)


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #16 (permalink)  
Antiguo 25/04/2011, 11:53
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Respuesta: extraer solo lo que esta dentro de los parentesis

OK, me devuelve el siguiente mensaje:

no tiene parentesis ya sea que abre o que cierra o no tiene ninguno


  #17 (permalink)  
Antiguo 25/04/2011, 12:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: extraer solo lo que esta dentro de los parentesis

esto lo estas haciendo para solo un valor o para toda la tabla??

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #18 (permalink)  
Antiguo 25/04/2011, 13:01
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: extraer solo lo que esta dentro de los parentesis

Toda la tabla!
  #19 (permalink)  
Antiguo 25/04/2011, 14:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: extraer solo lo que esta dentro de los parentesis

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. dato VARCHAR(200)
  4. )
  5.  
  6. INSERT INTO #temp (dato) VALUES ('mi casa esta hasta por aca (puerta azulada y que mas quieres que diga) mas texto por aca')
  7. INSERT INTO #temp (dato) VALUES ('mi casa esta (hasta)')
  8. INSERT INTO #temp (dato) VALUES ('mi casa esta)')
  9. INSERT INTO #temp (dato) VALUES ('mi casa esta(')
  10. INSERT INTO #temp (dato) VALUES ('mi casa esta')
  11.  
  12.  
  13. SELECT
  14. CASE
  15. WHEN
  16. isnull(charindex('(',dato),0)>=1 AND isnull(charindex(')',dato),0)>=1 THEN
  17. SUBSTRING(dato,charindex('(',dato)+1,(charindex(')',dato)-charindex('(',dato))-1)
  18. ELSE 'sin parentesis'
  19. END AS cortada, dato FROM #temp

Ejemplo desde la tabla #temp con los diferentes valores cuando no tiene parentesis te presenta en el resultado "sin parentesis"

y para el update
Código SQL:
Ver original
  1. UPDATE tabla
  2. SET
  3. cadena=t1.cadena
  4. FROM
  5. (
  6. SELECT
  7. CASE
  8. WHEN
  9. isnull(charindex('(',dato),0)>=1 AND isnull(charindex(')',dato),0)>=1 THEN
  10. SUBSTRING(dato,charindex('(',dato)+1,(charindex(')',dato)-charindex('(',dato))-1)
  11. ELSE 'sin parentesis'
  12. END AS cadena, dato FROM #temp
  13. ) AS t1
Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #20 (permalink)  
Antiguo 27/04/2011, 12:52
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: extraer solo lo que esta dentro de los parentesis

Estimado Libras, muchas pero muchas gracias por responder a cada una de mis inquietudes y mas aun por dedicar el tiempo que dedicaste!

Paso a comentarte lo que finalmente termine haciendo y resolviendo gracias a los ejemplos que me enviaste!

Con este Select resolvi hubicar y substraer los casos que necesitaba en relacion a los parentesis:

SELECT
case
when
isnull(charindex('(',nombre_calle),0)>=1 AND isnull(charindex(')',nombre_calle),0)>=1
then
substring(nombre_calle,charindex('(',nombre_calle) +1,(charindex(')',nombre_calle)-charindex('(',nombre_calle))-1)
else 'sin parentesis'
end AS cortada, nombre_calle FROM DOMICILIOS
where (nombre_calle LIKE '%(%') AND (nombre_calle LIKE '%)%')


Y actualice los campos con este Update para los que abren y cierran:


UPDATE DOMICILIOS
SET
observaciones=substring(nombre_calle,charindex('(' ,nombre_calle)+1,(charindex(')',nombre_calle)-charindex('(',nombre_calle))-1)
where (nombre_calle LIKE '%(%') AND (nombre_calle LIKE '%)%')


y este otro para los que abren solamente:


UPDATE DOMICILIOS
SET
observaciones=substring(nombre_calle,charindex('(' ,nombre_calle)+1,len(nombre_calle)-1)
where (nombre_calle LIKE '%(%') AND (nombre_calle not LIKE '%)%')



Nuevamente muchas gracias por la ayuda, me fue de mucha utilidad!!!

Abrazo!
  #21 (permalink)  
Antiguo 27/04/2011, 13:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: extraer solo lo que esta dentro de los parentesis

De nada que bueno que te sirvio lo que te puse :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: select
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 22:59.