transact - ¿Cómo puedo verificar si una columna de texto de SQL Server está vacía?
transact sql empty (14)
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. Tratar de comparar contra '''' produce esta respuesta:
Los tipos de datos text y varchar son incompatibles en el operador no igual a.
¿Hay una función especial para determinar si el valor de una columna de texto no es nulo sino vacío?
¿Son nulos 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.
En realidad, solo tienes que usar el operador LIKE.
SELECT * FROM mytable WHERE mytextfield LIKE ''''
Para obtener solo 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 solo valores nulos:
SELECT * FROM myTable WHERE myColumn IS NULL
Para obtener valores distintos de nulos y vacíos:
SELECT * FROM myTable WHERE myColumn <> ''''
Y recuerde usar frases LIKE solo cuando sea necesario porque degradarán el rendimiento en comparación con otros tipos de búsquedas.
Podrías hacer como
SELECT * FROM TABLE WHERE FIELDNAME=''''
Quería tener un texto predefinido ("No hay laboratorios disponibles") para mostrar si el valor era 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
Sé que 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)
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 Garcia y @Uli Köhler.
Si es necesario para tratar con el hecho de que espacio-solo podría ser lo mismo que vacío en su escenario de caso de uso, porque la siguiente consulta arrojará 1, no 0.
SELECT datalength('' '')
Por lo tanto, iría por algo como:
SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''''))))
Tienes que hacer ambas cosas:
SELECT * FROM Table WHERE Text IS NULL or Text LIKE ''''
Use el método DATALENGTH , por ejemplo:
SELECT length = DATALENGTH(myField)
FROM myTABLE
Use el operador IS NULL:
Select * from tb_Employee where ename is null
Yo probaría contra SUBSTRING (textColumn, 0, 1)
ISNULL(
case textcolum1
WHEN '''' THEN NULL
ELSE textcolum1
END
,textcolum2) textcolum1
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '''')=''''
where datalength(mytextfield)=0