151

Estoy usando SQL Server 2005. Tengo una tabla con una columna de texto y tengo muchas filas en la tabla donde el valor de esta columna no es nulo, pero está vacío. Intentar comparar con '' produce esta respuesta:¿Cómo puedo verificar si una columna de texto de SQL Server está vacía?

Los tipos de datos text y varchar son incompatibles en el operador no igual.

¿Existe una función especial para determinar si el valor de una columna de texto no es nulo sino vacío?

+1

que convertiría la información Tipo e si es posible varchar (max), el texto ha quedado obsoleto; es mejor comenzar a hacer los cambios ahora si toca la tabla. Consulte con su dba, por supuesto. Pero cuanto más se pueden convertir las cosas antes de que se conviertan, mejor es mi pensamiento. Dependerá de la cantidad de código que tenga usando cosas como contener y escribir texto que se romperá en cuanto a si hacer esto ahora, pero lo menciono, por lo que es consciente de que será necesario cambiarlo eventualmente. – HLGEM

+0

¡Nunca he visto tantas respuestas incorrectas después de haber dado una respuesta correcta y marcado como la respuesta correcta! –

Respuesta

241
where datalength(mytextfield)=0 
+10

http://msdn.microsoft.com/en-us/library/ms173486.aspx –

+0

Esta no era la pregunta real, sino solo un comentario para las personas que solo leen el título, no olviden agregar 'O mytextfield IS NULL' cuando su columna puede ser 'NULL' – Daan

+0

' mytextfield IS NULL * OR * ':-) –

21

En realidad, sólo hay que utilizar el operador LIKE.

SELECT * FROM mytable WHERE mytextfield LIKE '' 
+3

Parece que no funciona en SQL Server 2008 – escist

+0

@escist tiene razón. – Dane

+0

¡Impresionante! ¡Simplemente el mejor! –

0

¿Son nulas y una cadena vacía equivalente? Si lo son, incluiría la lógica en mi aplicación (¿o quizás un activador si la aplicación está "lista para usar"?) Para forzar que el campo sea nulo o '', pero no el otro. Si fue con '', entonces podría establecer la columna a NOT NULL también. Solo una cosa de limpieza de datos.

43
ISNULL(
case textcolum1 
    WHEN '' THEN NULL 
    ELSE textcolum1 
END 
,textcolum2) textcolum1 
+0

La consulta anterior realmente manejará la nulidad y la naturaleza de vacío de una columna de texto y, en consecuencia, asignará el valor según la condición. Voten por la respuesta, ya que esto es lo que estaba buscando. Gracias –

0

quería tener un texto predefinido ("No hay laboratorios disponibles") que se mostrará si el valor es nulo o vacío y mi amigo me ayudó con esto:

StrengthInfo = CASE WHEN ((SELECT COUNT(UnitsOrdered) FROM [Data_Sub_orders].[dbo].[Snappy_Orders_Sub] WHERE IdPatient = @PatientId and IdDrugService = 226)> 0) 
          THEN cast((S.UnitsOrdered) as varchar(50)) 
        ELSE 'No Labs Available' 
        END 
2

sé este post es antiguo pero, lo encontré útil.

No resolvió mi problema de devolver el registro con un campo de texto no vacío, así que pensé en agregar mi solución.

Esta es la cláusula where que funcionó para mí.

WHERE xyz LIKE CAST('% %' as text) 
0

que tiene que hacer dos cosas:

SELECT * FROM Table WHERE Text IS NULL or Text LIKE ''

2

que podría hacer como

SELECT * FROM TABLE WHERE FIELDNAME='' 
+4

Ni siquiera leyó toda la pregunta. Como ya se dijo en un comentario sobre la respuesta ahora eliminada, al comparar con '' aparece el error que aparece en la pregunta original. –

1

utilizar el operador NULL:

Select * from tb_Employee where ename is null 
+0

atoumey establece en la pregunta que "el valor de esta columna no es nulo, pero está vacío", por lo tanto, ISNULL() no funcionaría :) – GazB

0
SELECT * FROM TABLE 
WHERE ISNULL(LTRIM(RTRIM(FIELD)),''='' 
6

para obtener valores solamente vacías (y valores no nulos):

SELECT * FROM myTable WHERE myColumn = '' 

para obtener ambos valores nulos y vacíos:

SELECT * FROM myTable WHERE myColumn IS NULL OR myColumn = '' 

para obtener valores solamente nulos:

SELECT * FROM myTable WHERE myColumn IS NULL 

Para obtener valores distintos de nulos y vacíos:

SELECT * FROM myTable WHERE myColumn <> '' 


Y recuerde utilizar frases LIKE solo cuando sea necesario porque degradarán el rendimiento en comparación con otros tipos de búsquedas.

+0

¿No quiere decir 'myColumn IS NOT NULL AND my column = ''; ¿? – bcsb1001

+0

Gracias, aclarado. – Nima

0

Sé que hay un montón respuestas con las alternativas a este problema, pero simplemente le gustaría juntar lo que he encontrado que la mejor solución por @Eric Z Barba & @Tim Cooper con @Enrique García & @Uli Köhler.

si es necesario para lidiar con el hecho de que el espacio de sólo podría ser el mismo que el vacío en el escenario de caso de uso, debido a que la consulta siguiente devolverá 1, no 0.

SELECT datalength(' ') 

Por lo tanto, lo haría ir para algo como:

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], '')))) 
0

uso DATALENGTH método, por ejemplo:

SELECT length = DATALENGTH(myField) 
FROM myTABLE 
Cuestiones relacionadas