Pregunta

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, sino que está vacío.Al intentar comparar con '' se obtiene esta respuesta:

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

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

¿Fue útil?

Solución

where datalength(mytextfield)=0

Otros consejos

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

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

SELECT * FROM mytable WHERE mytextfield LIKE ''

Para obtener sólo valores vacíos (y no valores nulos):

SELECT * FROM myTable WHERE myColumn = ''

Para obtener valores nulos y vacíos:

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

Para obtener sólo valores nulos:

SELECT * FROM myTable WHERE myColumn IS NULL

Para obtener valores distintos de nulos y vacíos:

SELECT * FROM myTable WHERE myColumn <> ''


Y recuerda utilizar frases ME GUSTA sólo cuando sea necesario porque degradarán el rendimiento en comparación con otro tipo de búsquedas.

Sé que esta publicación es antigua pero la 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 donde funcionó para mí.

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

Usar LONGITUD DE DATOS método, por ejemplo:

SELECT length = DATALENGTH(myField)
FROM myTABLE

Yo probaría contra SUBCADE(Columna de texto, 0, 1)

¿Son equivalentes nulo y una cadena vacía?Si es así, incluiría lógica en mi aplicación (¿o tal vez un disparador si la aplicación está "lista para usar"?) para forzar que el campo sea nulo o '', pero no el otro.Si eligió '', también podría configurar la columna en NOT NULL.Simplemente una cuestión de limpieza de datos.

Quería que se mostrara un texto predefinido ("No hay laboratorios disponibles") si el valor era nulo o estaba 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

Tienes que hacer ambas cosas:

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

Utilice el operador ES NULO:

Select * from tb_Employee where ename is null

Sé que hay muchas respuestas con alternativas a este problema, pero me gustaría reunir lo que encontré como la mejor solución de @Eric Z Beard y @Tim Cooper con @Enrique García y @Uli Köhler.

Si es necesario, tenga en cuenta el hecho de que solo espacio podría ser lo mismo que vacío en su caso de uso, porque la siguiente consulta devolverá 1, no 0.

SELECT datalength(' ')

Por lo tanto, optaría por algo como:

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''

prueba esto:

select * from mytable where convert(varchar, mycolumn) = ''

espero ayudarte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top