2009-10-23 16 views
6

¿Cómo puedo escribir una instrucción select para seleccionar solo enteros (y nada más) desde una columna char en SQL Server. Por ejemplo, mi nombre de tabla es polvo con 2 columnas, ID (int) y Nombre (char (5))Seleccionar solo enteros de la columna char usando SQL Server

ID  Name 
-- ---------- 
1  AXF22 
2  HYWWW 
3  24680 
4  8YUH8 
5  96635 

Quiero ser capaz de seleccionar sólo aquellas filas que contienen un número entero y nada más (ID 3 e ID 5 en este ejemplo)

Si trato:

SELECT * 
    FROM POWDER 
WHERE Name LIKE '[0-9]%' 

... volverá:

ID  Name 
-- ---------- 
3  24680 
4  8YUH8 
5  96635 

Cualquier ide cómo obtener las filas que contienen sólo enteros?

+0

@Andy Select: ¿Qué RBDMS? MySQL? ¿Servidor SQL? – Asaph

Respuesta

12
SELECT * FROM POWDER WHERE IsNumeric(Name) = 1 

vuelve IsNumeric 1 para algunos otros personajes que son válidos en números, como + y - y $ pero para su entrada que debe estar bien.

+0

Impresionante, gracias Chris. –

1

Para evitar problemas con ISNUMERIC y todos los espacios, -, +,. etc, utilice el hecho de que la columna es CHAR (5)

SELECT * 
    FROM POWDER 
WHERE Name LIKE '[0-9][0-9][0-9][0-9][0-9]' 

Editar: para cualquier número de caracteres. Doble negativo ...

SELECT * 
    FROM POWDER 
WHERE Name NOT LIKE '%[^0-9]%' 
+0

Hola gbn, gracias por su respuesta. ¿Qué ocurre si tengo valores de nombre que son menos de 5 caracteres? –

1

Utilice los controles positivos y negativos para asegurarse de que tenemos un número entero: Debe contener un dígito. Solo se permiten dígitos y espacios. No se permiten espacios entre los dígitos.

SELECT * 
    FROM POWDER 
WHERE Name LIKE '%[0-9]%' 
    AND Name NOT LIKE '%[^0-9 ]%' 
    AND Name NOT LIKE '%[0-9]% %[0-9]%' 
-1

El último es el mejor, funciona bastante bien.

SELECT * FROM POWDER 
    WHERE Name LIKE '%[0-9]%'  
     AND Name NOT LIKE '%[^0-9 ]%'  
     AND Name NOT LIKE '%[0-9]% %[0-9]%' 
+0

Una respuesta mucho más simple http://stackoverflow.com/a/3485567/848072 – albfan

4

Prueba esto:

SELECT * FROM tabla WHERE nombre LIKE '[0-9] %%'

0

SELECT * FROM POLVO
donde nombre patindex ('% [az]% ', name)! = 0

+0

¿Cómo se puede usar '%' sin me gusta en las consultas SQL? – NullPointer

+0

que podemos usar en patindex consulte http://msdn.microsoft.com/en-us/library/aa276881%28v=sql.80%29.aspx – sathish

Cuestiones relacionadas