Curiosidad tabla y vista que filtra datos númericos sobre columna varchar

29/11/2007 - 15:47 por Salvador Ramos | Informe spam
Hola a todos,

El otro día me plantearon la siguiente curiosidad. Hago una tabla y en un
campo varchar introduzco datos numéricos y no numéricos, hago una vista para
filtrar sólo los numéricos. Si luego hago una select sobre la vista
funciona, pero si esa select lleva una condición where da error. Aquí tenéis
un script que reproduce dicha curiosidad:
(Por supuesto no vamos a entrar en hacerlo de otra forma con los números en
columnas numéricas, simplemente estudiar este caso)

use Pruebas
GO

drop table mezcla
GO

create table mezcla(id int identity(1, 1), pupurri varchar(20))
GO

insert into mezcla values('pepe')
insert into mezcla values('001')
insert into mezcla values('15')
insert into mezcla values('juan')
insert into mezcla values('1')
insert into mezcla values('150')
GO

create view solonum as
select id, cast(pupurri as int) num
from mezcla
where pupurri not like '%[A-Z]%'
and pupurri like '%[0-9]%'
GO

select *
from solonum

select *
from solonum
where num = 15

El mensaje es el siguiente:
Mens. 245, Nivel 16, Estado 1, Línea 1
Error de conversión al convertir el valor varchar 'pepe' al tipo de datos
int.

El problema es que esto ya lo tienen implementado sobre 2000 (que funciona
correctamente) y ahora para migrar a 2005 se encuentran con el error.
Qué soluciones se os ocurren, a parte de crear nuevas columnas u otras
modificaciones en el diseño ?

Muchas gracias

Un saludo
Salvador Ramos

www.helpdna.net (información sobre SQL Server y Microsoft .Net)
www.helpdna.net/acerca_de_salvador_ramos.htm
 

Leer las respuestas

#1 Gux (MVP)
29/11/2007 - 16:41 | Informe spam
Prefiero validar si un varchar es numerico usando la función ISNUMERIC en vez
de usar una expresión regular.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Salvador Ramos" wrote:

Hola a todos,

El otro día me plantearon la siguiente curiosidad. Hago una tabla y en un
campo varchar introduzco datos numéricos y no numéricos, hago una vista para
filtrar sólo los numéricos. Si luego hago una select sobre la vista
funciona, pero si esa select lleva una condición where da error. Aquí tenéis
un script que reproduce dicha curiosidad:
(Por supuesto no vamos a entrar en hacerlo de otra forma con los números en
columnas numéricas, simplemente estudiar este caso)

use Pruebas
GO

drop table mezcla
GO

create table mezcla(id int identity(1, 1), pupurri varchar(20))
GO

insert into mezcla values('pepe')
insert into mezcla values('001')
insert into mezcla values('15')
insert into mezcla values('juan')
insert into mezcla values('1')
insert into mezcla values('150')
GO

create view solonum as
select id, cast(pupurri as int) num
from mezcla
where pupurri not like '%[A-Z]%'
and pupurri like '%[0-9]%'
GO

select *
from solonum

select *
from solonum
where num = 15

El mensaje es el siguiente:
Mens. 245, Nivel 16, Estado 1, Línea 1
Error de conversión al convertir el valor varchar 'pepe' al tipo de datos
int.

El problema es que esto ya lo tienen implementado sobre 2000 (que funciona
correctamente) y ahora para migrar a 2005 se encuentran con el error.
Qué soluciones se os ocurren, a parte de crear nuevas columnas u otras
modificaciones en el diseño ?

Muchas gracias

Un saludo
Salvador Ramos

www.helpdna.net (información sobre SQL Server y Microsoft .Net)
www.helpdna.net/acerca_de_salvador_ramos.htm




Preguntas similares