Conduce Chile

General => De Todo Un Poco => Mensaje iniciado por: Mithrandir en Febrero 07, 2013, 10:07:16 am

Título: ayuda con sql 2.0 (SQL2008)
Publicado por: Mithrandir en Febrero 07, 2013, 10:07:16 am
estiamados, tengo un pequeño dolor de cabeza con SQL 2008

tengo un campo que el formato es asi 
AHO;45698741125522157 ,
uno es el tipo de cuenta y el otro es el numero de cuenta

necesito separarlos en 2 campos al realizar la consulta pero el tipo de cuenta puede ser de 0 hasta 7 caracteres y el otro entre 15 y 20 caracteres
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: KBezon en Febrero 07, 2013, 10:41:31 am
tienes primero que meter en una variable (pos) la posicion del ";", luego separas..

;)
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: Mithrandir en Febrero 07, 2013, 10:55:21 am
no me funko.....  :'( :'( :'( :'(
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: KBezon en Febrero 07, 2013, 10:56:33 am
no me funko.....  :'( :'( :'( :'(

postea la query..
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: negroVeloz en Febrero 07, 2013, 10:57:42 am
No caché mucho el problema, pero te sirve algo así?:
Select ...........* from.................... Where SUBSTRING(columna1, 1, 10) = ..............
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: Mithrandir en Febrero 07, 2013, 11:01:38 am
estimados esta es la query, los campos que necesito separar son CTA.Cpa_Numero_Cuenta, este campo posee los 2 campos que necesito

select  CTA.Cpa_Numero_Cuenta,
      CTA.cpa_numero_cuenta,
      PAR.Par_rut_Participe,
      PAR.Par_Dv,
      CUO.cue_numero_cuenta,
      CUO.Fmu_Fondo,
      SOL.sol_moneda,
      SOl.SOL_TOTAL_SOLICITUD,
      SOL.Sol_Fecha_Ingreso,
      SOl.Sol_Fecha_Pago,
      Sol.Sol_Inversion_Periodica,
      PAR.Age_Agente     
from Fmu_Cuenta_Bancaria_Participes CTA
inner join Fmu_Participes PAR
on CTA.Par_rut_Participe = par.Par_rut_Participe
inner join Fmu_Solicitudes SOl
on CTA.Par_rut_Participe = SOl.Par_rut_Participe
inner join fmu_saldo_cuotas CUO
on CTA.Par_rut_Participe = CUO.Par_rut_Participe
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: negroVeloz en Febrero 07, 2013, 11:08:17 am
No tienen ancho fijo??? Si no tienen un ancho fijo y están metidos en un mismo campo, lo considero un error de diseño.
Está complicado, pero no imposible, déjame darle una vuelta pero se me ocurre que podrías crear una función almacenada y ahí meter el código que necesitas.

Otra consulta: necesitas separarlos para aplicarle la condición de búsqueda? ó sólo para obtener columnas separadas? (Where).
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: Mithrandir en Febrero 07, 2013, 11:11:44 am
No tienen ancho fijo??? Si no tienen un ancho fijo y están metidos en un mismo campo, lo considero un error de diseño.
Está complicado, pero no imposible, déjame darle una vuelta pero se me ocurre que podrías crear una función almacenada y ahí meter el código que necesitas.

Otra consulta: necesitas separarlos para aplicarle la condición de búsqueda? ó sólo para obtener columnas separadas? (Where).

es solo para obtener columnas separadas, el primero es de largo 5 y el otro de largo 20, y si no tiene 20 caracteres se rellenan con 0 a la izquierda
ese es el resultado, es una insert select a una tabla de trabajo. lo otro que el campo que dice CCT no siempre viene informada

CCT  ; 64500025750
CCT  ; 64500025750
CCT  ; 64500025750
CCT  ; 64500025750
CCT  ; 54300015185
CCT  ; 54300015185
CCT  ; 54300015185

es parte de un SP, y aca en el banco son un poco especiales en estos casos, asi que entre mas simple la solucion mejor
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: negroVeloz en Febrero 07, 2013, 11:26:08 am
es solo para obtener columnas separadas, el primero es de largo 5 y el otro de largo 20, y si no tiene 20 caracteres se rellenan con 0 a la izquierda
ese es el resultado, es una insert select a una tabla de trabajo. lo otro que el campo que dice CCT no siempre viene informada

CCT  ; 64500025750
CCT  ; 64500025750
CCT  ; 64500025750
CCT  ; 64500025750
CCT  ; 54300015185
CCT  ; 54300015185
CCT  ; 54300015185

es parte de un SP, y aca en el banco son un poco especiales en estos casos, asi que entre mas simple la solucion mejor
Ah, entonces substring es lo que necesitas.
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: Fredy Turbina en Febrero 07, 2013, 11:28:40 am
Envíaselo al de IT para que lo arregle..... :tumtum:
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: negroVeloz en Febrero 07, 2013, 11:33:36 am
Envíaselo al de IT para que lo arregle..... :tumtum:
(http://mispeliculasdeterror.com/wp-content/uploads/2012/06/it-eso.jpg)
 :tumtum: :tumtum:
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: Mithrandir en Febrero 07, 2013, 12:13:10 pm
Ah, entonces substring es lo que necesitas.

ya perfecto tengo una parte de la query echa, pero el problema es que si no tiene el prefijo AHO, CCT, etc, me toma los 5 primeros caracteres ya sea desde el numero de la cuenta o de los prefijos que necesito,  los 2 primeros estan incorrectos, los 2 ultimos estan bien
deberia quedar asi

Campo 1                                   campo 2
00000000000001049854             
00000000000001049854               
00000000064500025750             CCT   
00000000064500025750             CCT 

no asi
campo 1       campo 2
54                      10498 
54                      10498 
 64500025750      CCT   
 64500025750      CCT   
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: Mithrandir en Febrero 07, 2013, 13:47:43 pm
alguien????
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: Mithrandir en Febrero 08, 2013, 07:46:40 am
???
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: negroVeloz en Febrero 08, 2013, 08:20:32 am
Disculpa he estado con mucha pega. Pero tu problema claramente tiene la complicación que al no tener 2 variables en 1 solo campo, y estos no están con una nomenclatura lógica, es difícil que puedas usar funciones integradas de sql server. Creo que deberás hacer tu propia función y después llamarla desde el query. Con esto pierdes un poco de rendimiento en los query dependiendo de los procesos que necesites para obtener los campos. Para llamar a tu función deberás por algo así:

select ................, dbo.mifunción1(CTA.Cpa_Numero_Cuenta), .........* from.............

Anteponiendo el nombre del usuario propietario de la función, que en este caso es dbo.
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: Mithrandir en Febrero 08, 2013, 08:28:55 am
Disculpa he estado con mucha pega. Pero tu problema claramente tiene la complicación que al no tener 2 variables en 1 solo campo, y estos no están con una nomenclatura lógica, es difícil que puedas usar funciones integradas de sql server. Creo que deberás hacer tu propia función y después llamarla desde el query. Con esto pierdes un poco de rendimiento en los query dependiendo de los procesos que necesites para obtener los campos. Para llamar a tu función deberás por algo así:

select ................, dbo.mifunción1(CTA.Cpa_Numero_Cuenta), .........* from.............

Anteponiendo el nombre del usuario propietario de la función, que en este caso es dbo.

me dejaste pillo, no cacho como implementar eso  :oops: :oops: :wtf: :wtf: :wtf: :wtf: :wtf:
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: negroVeloz en Febrero 08, 2013, 09:22:32 am
me dejaste pillo, no cacho como implementar eso  :oops: :oops: :wtf: :wtf: :wtf: :wtf: :wtf:
Acá tienes un ejemplo.
http://www.devtroce.com/2010/01/18/crear-e-invocar-funciones-udf-en-sql-server/ (http://www.devtroce.com/2010/01/18/crear-e-invocar-funciones-udf-en-sql-server/)

La gracia de las funciones escalares, es que puedes aplicar loops, if-else, y todo lo que quieras que está incorporado en el lenguaje almacenado.  :thumbsup:
Muy útil y fácil.
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: GatoR en Febrero 08, 2013, 11:44:23 am
así con el xv.... :risa2: :risa2:
suerte con lo que necesitas, están hablando en chino para el común de los cristianos y moros.
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: DesarrolloNet en Febrero 08, 2013, 11:52:06 am
me dejaste pillo, no cacho como implementar eso  :oops: :oops: :wtf: :wtf: :wtf: :wtf: :wtf:

pero necesitas solo una query?
o puede ser un SP???????
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: Mithrandir en Febrero 08, 2013, 12:18:02 pm
pero necesitas solo una query?
o puede ser un SP???????

es una query dentro de un sp
Título: Re:ayuda con sql 2.0 (SQL2008)
Publicado por: DesarrolloNet en Febrero 08, 2013, 17:28:22 pm
es una query dentro de un sp


Estimado.
la mejor solucion como lo dice negroVelozVirus.
usa SUBSTRING  vaz jugando con las posiciones o con el CHARINDEX la posicion del caracter que los separa
y si necesitas llenar con 0, usas select RIGTH('0000' + '10',5)

Ojalas te sirva
saludos