Domanda

Sto utilizzando SQL Server 2005.Ho una tabella con una colonna di testo e ho molte righe nella tabella in cui il valore di questa colonna non è nullo, ma è vuoto.Provando a confrontare con '' si ottiene questa risposta:

I tipi di dati text e varchar sono incompatibili nell'operatore non uguale a.

Esiste una funzione speciale per determinare se il valore di una colonna di testo non è nullo ma vuoto?

È stato utile?

Soluzione

where datalength(mytextfield)=0

Altri suggerimenti

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

In realtà, devi solo usare l'operatore LIKE.

SELECT * FROM mytable WHERE mytextfield LIKE ''

Per ottenere solo valori vuoti (e non valori nulli):

SELECT * FROM myTable WHERE myColumn = ''

Per ottenere sia valori nulli che vuoti:

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

Per ottenere solo valori nulli:

SELECT * FROM myTable WHERE myColumn IS NULL

Per ottenere valori diversi da null e vuoto:

SELECT * FROM myTable WHERE myColumn <> ''


E ricorda di utilizzare le frasi MI PIACE solo quando necessario perché peggioreranno le prestazioni rispetto ad altri tipi di ricerche.

So che questo post è antico ma l'ho trovato utile.

Non ha risolto il mio problema di restituire il record con un campo di testo non vuoto, quindi ho pensato di aggiungere la mia soluzione.

Questa è la clausola where che ha funzionato per me.

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

Utilizzo LUNGHEZZA DATI metodo, ad esempio:

SELECT length = DATALENGTH(myField)
FROM myTABLE

Farei un test contro SOTTOSTRINGA(colonna di testo, 0, 1)

Null e una stringa vuota sono equivalenti?Se lo sono, includerei la logica nella mia applicazione (o forse un trigger se l'app è "pronta all'uso"?) per forzare il campo ad essere nullo o '', ma non l'altro.Se hai scelto '', puoi anche impostare la colonna su NOT NULL.Solo una questione di pulizia dei dati.

Volevo avere un testo predefinito ("Nessun laboratorio disponibile") da visualizzare se il valore era nullo o vuoto e il mio amico mi ha aiutato in questo:

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

Devi fare entrambe le cose:

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

Utilizza l'operatore IS NULL:

Select * from tb_Employee where ename is null

So che ci sono molte risposte con alternative a questo problema, ma vorrei solo mettere insieme quella che ho trovato come la migliore soluzione da @Eric Z Beard e @Tim Cooper con @Enrique Garcia e @Uli Köhler.

Se necessario, gestisci il fatto che solo spazio potrebbe essere uguale a vuoto nel tuo scenario d'uso, perché la query seguente restituirà 1, non 0.

SELECT datalength(' ')

Pertanto, opterei per qualcosa del tipo:

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

prova questo:

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

spero di aiutarti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top