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?

Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top