2008-12-08 11 views
6

Tengo algunos valores en blanco en mi tabla, y parece que no puedo verlos en una declaración IF.Prueba de espacios en blanco en SQL Server

He intentado

IF @value = '' y if @value = NULL y ni uno coge los valores en blanco. ¿Hay alguna manera de probar si un varchar es completamente espacio en blanco?

AHA! Resulta que estaba probando un error nulo. Gracias.

Respuesta

8

Para comparar con NULL, utilice el IS . palabra clave NULL

--Generic example: 
SELECT * 
FROM MY_TABLE 
WHERE SOME_FIELD IS NULL; 

--Instead of  

SELECT * 
FROM MY_TABLE 
WHERE SOME_FIELD = NULL; 
+0

O CONFIGURAR NÚMEROS ANSI DESACTIVADOS - Prefiero seguir la especificación SQL-92 aunque nos es IS NULL – stephbu

+1

Puede que falte algo, pero esto no corrige la forma de probar el espacio en blanco en absoluto. Corrige la sintaxis de la comprobación de nulo, pero NO es lo que la pregunta estaba haciendo. –

3

si la longitud (@value) = 0 o @value es nula

+0

La compensación solo es necesaria cuando se miden valores de entrada, donde no se desea el espacio en blanco. De lo contrario len() lo atrapa todo. – ProfK

3

(LTRIM (RTRIM (@Valor)) = '' debe hacer el truco.

0

usted puede tener múltiples campos con espacios (' ') de manera que obtendrá mejores resultados si recorta que:

where ltrim(yourcolumnname) = '' 
10
ltrim(rtrim(isNull(@value,''))) = '' 
2

donde la longitud (rtrim (ltrim (yourcolumnname))) = 0 O yourcolumnname es nulo

1

simplemente hice algunas pruebas, y descubrí algo interesante. solía escribir mis consultas de este modo:

SELECT * 
FROM TableA 
WHERE Val IS NOT NULL 
AND LEN(RTRIM(LTRIM(Val))) > 0 

Pero, en realidad no se necesita para comprobar nula, todo lo que tiene que hacer es comprobar la longitud después de recortar el valor.

SELECT * 
FROM TableA 
WHERE LEN(RTRIM(LTRIM(Val))) > 0 

Esto selecciona elimina nulos, así como cualquier columna con espacio en blanco.

Como resultado, no es necesario recortar el valor porque SQL Server ignora espacios en blanco, por lo que todo lo que realmente se necesita esta: SELECT * desde la Tabla DONDE LEN (Val)> 0

+0

Tienes razón. SELECT LEN ('') devuelve 0 – Freshblood

2

En lugar de realizar una manipulación excesiva de cadena con LTRIM Y RTRIM, solo busque en la expresión el primer "no espacio".

SELECT 
      * 
    FROM 
      [Table] 
    WHERE 
      COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0 
Cuestiones relacionadas