clausula case en el where de un update, o, como eliminar ceros iniciales

02/05/2006 - 21:23 por .·:m·a·r·l·a:·. | Informe spam
Hola a todos

quiero hacer un upddate en una tabla buscando los valores en otra tabla, el
problema es que las relaciones entre tablas son entre campos varchar aunque
en la mayoria de los casos deverian contener valores validos como numericos

por ello busco una forma que cruze valores tal que '012345' y '12345' y que
no se pare cuando encuentre '12x45'


el ejemplo que tengo es

UPDATE tabla1
SET campo4 = tabla2.campo4
from tabla1, tabla2
where
tabla1.campo1 = tabla2.campo1

pero no funciona para '012345' y '12345', pruebo entonces cambiando el where
a


where
cast(tabla1.campo1 as bigint) = cast(tabla2.campo1 as bigint)


pero, por supuesto, se para cuando encuentra alguna valor no numerico, asi
pense en ::


where
case when (isnumeric(tabla1.campo1 ))
then cast(tabla1.campo1 as bigint)
else tabla1.campo1
end
case when (isnumeric(tabla2.campo1 ))
then cast(tabla2.campo1 as bigint)
else tabla2.campo1
end


intentando que en caso de encontrar un valor que se pueda convertir a bigint
lo compare como bigint, y si no utilice varchar, pero el error devuelto es
::

Server: Msg 156, Level 15, State 1, Line 14
Incorrect syntax near the keyword 'then'.


quizas tambien me sirviera alguna funcion que me permitira eliminar los
ceros del principio y comparar las cadenas, pero que no eliminara los ceros
intermedios


alguna idea, gracias por adelantado
 

Leer las respuestas

#1 Maxi [MVP]
03/05/2006 - 03:54 | Informe spam
mmm y siempre sigue la misma regla? o sea siempre hay un 0 a la izquierda?


Salu2
-
[Microsoft MVP] SQL Server
Orador para Culminis Latam
www.sqlgurus.org

MSN:

".·:m·a·r·l·a:·." escribió en el mensaje
news:
Hola a todos

quiero hacer un upddate en una tabla buscando los valores en otra tabla,
el
problema es que las relaciones entre tablas son entre campos varchar
aunque
en la mayoria de los casos deverian contener valores validos como
numericos

por ello busco una forma que cruze valores tal que '012345' y '12345' y
que
no se pare cuando encuentre '12x45'


el ejemplo que tengo es

UPDATE tabla1
SET campo4 = tabla2.campo4
from tabla1, tabla2
where
tabla1.campo1 = tabla2.campo1

pero no funciona para '012345' y '12345', pruebo entonces cambiando el
where
a


where
cast(tabla1.campo1 as bigint) = cast(tabla2.campo1 as bigint)


pero, por supuesto, se para cuando encuentra alguna valor no numerico, asi
pense en ::


where
case when (isnumeric(tabla1.campo1 ))
then cast(tabla1.campo1 as bigint)
else tabla1.campo1
end
> case when (isnumeric(tabla2.campo1 ))
then cast(tabla2.campo1 as bigint)
else tabla2.campo1
end


intentando que en caso de encontrar un valor que se pueda convertir a
bigint
lo compare como bigint, y si no utilice varchar, pero el error devuelto es
::

Server: Msg 156, Level 15, State 1, Line 14
Incorrect syntax near the keyword 'then'.


quizas tambien me sirviera alguna funcion que me permitira eliminar los
ceros del principio y comparar las cadenas, pero que no eliminara los
ceros
intermedios


alguna idea, gracias por adelantado



Preguntas similares