2011-03-09 11 views
7

Básicamente quiero hacer esto:Cómo seleccionar sólo los registros que tienen el número en la columna (SQL)

Quiero devolver un conjunto de registros convertir un valor de tipo nvarchar (ID) a un entero si contiene un número. Si la ID se puede convertir en un número, agregue esa fila al conjunto de registros SELECT. Si no, omita esa fila.

Creo que el SQL debería verse más o menos así.

(ID es de tipo nvarchar (10) en dbo.Table)

CREATE TABLE #Temp (ID int) 
INSERT INTO #Temp SELECT ID FROM Table Where ISNumeric(Id)=0 

pero me da un error: el valor nvarchar 'Default' al tipo de datos int. Si hago un SELECT CAST(ID as int) que tampoco funciona.

Respuesta

13

Para estar seguro, olvidarse de ISNUMERIC

Si usted no está esperando los números negativos, puede utilizar esta

INSERT INTO #Temp SELECT ID FROM Table 
Where Id > '' -- is not the empty string and is not null 
    AND not ID like '%[^0-9]%' -- contains digits only 
9

ISNumeric(Id)=0 debe ser ISNumeric(Id)=1

Sin embargo ISNUMERIC tiene un problema

plazo esto

SELECT ISNUMERIC('2d5'), ISNUMERIC('-'), ISNUMERIC('+') 

Aquellos todos regresan 1

Tome un vistazo a IsNumeric, IsInt, IsNumber para algunas formas de averiguar si se puede convertir a un número entero

-1

Tal vez éste podría ayudar:

select column_desired from requested_table <> 0 or is not null 
Cuestiones relacionadas