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

[SOLUCIONADO] Replace de mas de un caracter.

Estas en el tema de Replace de mas de un caracter. en el foro de SQL Server en Foros del Web. Tengo una consulta la cual me trae danos que necesito para poder generar reportes. el problema esque al momento en qeu las capturaron me imagino ...
  #1 (permalink)  
Antiguo 09/01/2014, 11:46
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 10 años, 11 meses
Puntos: 5
Replace de mas de un caracter.

Tengo una consulta la cual me trae danos que necesito para poder generar reportes.

el problema esque al momento en qeu las capturaron me imagino qeu tuvieron errores y hay datos que no quiero que me compare, lo que quiero esque no los tome en cuenta, solo utilizaba en replace pero solo me esta quintndo los ceros.

Código SQL:
Ver original
  1. SELECT REPLACE(GB.TRADAT ,0 ,'') AS DATITO FROM PRD1323

Mis datos se presentan de las siguiente manera

00012AB
153GB12


y lo que quiero que me extraiga son las letras AB Y GB

Entre todo solo existe una excepción que si tiene numero qeu es G2

Que puedo hacer en este caso.
  #2 (permalink)  
Antiguo 09/01/2014, 11:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Replace de mas de un caracter.

la forma mas sencilla que se me ocurre es con un proceso como este:

Código SQL:
Ver original
  1. DECLARE @variable VARCHAR(MAX)
  2. DECLARE @x INT
  3. DECLARE @caracter VARCHAR(20)
  4. DECLARE @resultado VARCHAR(20)
  5. SET @x=1
  6. SET @variable='00012AB'
  7. SET @resultado=''
  8. while @x<=len(@variable)
  9. BEGIN
  10. SET @caracter=SUBSTRING(@variable,@x,1)
  11. IF isnumeric(@caracter)=0
  12.   SET @resultado=@resultado+@caracter  
  13. IF ISNUMERIC(@caracter)=1 AND (@resultado='G' OR @resultado='g')
  14.   SET @resultado=@resultado+@caracter  
  15. SET @x=@x+1
  16. END
  17. print @resultado

podrias ponerlo en una funcion para que lo puedas usar en tus consultas :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 09/01/2014, 14:15
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Replace de mas de un caracter.

Si existe solamente un par de caracteres:
Código SQL:
Ver original
  1. DECLARE @variable VARCHAR(MAX)='00012AB';
  2. SELECT  SUBSTRING(@variable,PatIndex('%[^0123456789]%',@variable),2);
Si existe una secuencia de caracteres:
Código SQL:
Ver original
  1. DECLARE @variable VARCHAR(MAX)='12abcd56';
  2. SELECT  Stuff('0'+LEFT(@variable,Len(@variable)-PatIndex('%[^0123456789]%',Reverse('0'+@variable+'0'))+2),1,PatIndex('%[^0123456789]%','0'+@variable+'0')-1,'');
Si existen varias secuencias de caracteres - Puedes utilizar la solucion de Libras (un bucle) o un CTE dinamico:
Código SQL:
Ver original
  1. DECLARE @variable VARCHAR(MAX)='12abcd56ef7g8';
  2. WITH CTE AS
  3. (SELECT 0 N,
  4.         REPLACE(@variable,1,'') variable
  5. UNION ALL
  6. SELECT  N+1 N,
  7.         REPLACE(variable,N+1,'') variable
  8. FROM    CTE
  9. WHERE   N<9)
  10. SELECT  Variable
  11. FROM    CTE
  12. WHERE   N=9;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #4 (permalink)  
Antiguo 10/01/2014, 15:26
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Replace de mas de un caracter.

y ya aplicaste alguna de las ideas que se te dieron????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 10/01/2014, 15:33
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 10 años, 11 meses
Puntos: 5
Respuesta: Replace de mas de un caracter.

Perdon Sr. Libras Si la segunda manera es la mas eficiente.

Y se me hizo muy buena. Gracias
  #6 (permalink)  
Antiguo 13/01/2014, 10:03
Avatar de aid_val  
Fecha de Ingreso: mayo-2013
Ubicación: Guanajuato
Mensajes: 302
Antigüedad: 10 años, 11 meses
Puntos: 5
Respuesta: Replace de mas de un caracter.

El blucle que propusiste es lo mas eficiente Sr. Libras me sirvio a la perfección. Gracias

Etiquetas: replace, 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 06:48.