Como posso verificar se uma coluna de texto do SQL Server está vazia?
-
09-06-2019 - |
Pergunta
Estou usando o SQL Server 2005.Tenho uma tabela com uma coluna de texto e tenho muitas linhas na tabela onde o valor desta coluna não é nulo, mas está vazio.Tentar comparar com '' produz esta resposta:
Os tipos de dados text e varchar são incompatíveis no operador diferente de.
Existe uma função especial para determinar se o valor de uma coluna de texto não é nulo, mas vazio?
Solução
where datalength(mytextfield)=0
Outras dicas
ISNULL(
case textcolum1
WHEN '' THEN NULL
ELSE textcolum1
END
,textcolum2) textcolum1
Na verdade, basta usar o operador LIKE.
SELECT * FROM mytable WHERE mytextfield LIKE ''
Para obter apenas valores vazios (e não valores nulos):
SELECT * FROM myTable WHERE myColumn = ''
Para obter valores nulos e vazios:
SELECT * FROM myTable WHERE myColumn IS NULL OR myColumn = ''
Para obter apenas valores nulos:
SELECT * FROM myTable WHERE myColumn IS NULL
Para obter valores diferentes de nulo e vazio:
SELECT * FROM myTable WHERE myColumn <> ''
E lembre-se de usar frases LIKE somente quando necessário, pois elas prejudicarão o desempenho em comparação com outros tipos de pesquisas.
Eu sei que este post é antigo, mas achei útil.
Isso não resolveu meu problema de retornar o registro com um campo de texto não vazio, então pensei em adicionar minha solução.
Esta é a cláusula where que funcionou para mim.
WHERE xyz LIKE CAST('% %' as text)
Usar COMPRIMENTO DE DADOS método, por exemplo:
SELECT length = DATALENGTH(myField)
FROM myTABLE
eu testaria contra SUBSTRING(coluna de texto, 0, 1)
Nulo e uma string vazia são equivalentes?Se estiverem, eu incluiria lógica em meu aplicativo (ou talvez um gatilho se o aplicativo estiver "pronto para uso"?) Para forçar o campo a ser nulo ou '', mas não o outro.Se você escolheu '', também poderá definir a coluna como NOT NULL.Apenas uma questão de limpeza de dados.
Eu queria que um texto predefinido("No Labs Available") fosse exibido se o valor fosse nulo ou vazio e meu amigo me ajudou com isso:
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
Você tem que fazer as duas coisas:
SELECT * FROM Table WHERE Text IS NULL or Text LIKE ''
Use o operador IS NULL:
Select * from tb_Employee where ename is null
Sei que existem muitas respostas com alternativas para esse problema, mas gostaria apenas de reunir o que considerei a melhor solução por @Eric Z Beard e @Tim Cooper com @Enrique Garcia e @Uli Köhler.
Se necessário, lide com o fato de que somente espaço pode ser igual a vazio em seu cenário de caso de uso, porque a consulta abaixo retornará 1, não 0.
SELECT datalength(' ')
Portanto, eu escolheria algo como:
SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''
tente isto:
select * from mytable where convert(varchar, mycolumn) = ''
espero te ajudar!