¿Cómo puedo verificar si una cadena de servidor Sql es nula o está vacía?

Quiero verificar los datos, pero ignórelos si es nulo o está vacío. Actualmente la consulta es la siguiente …

Select Coalesce(listing.OfferText, company.OfferText, '') As Offer_Text, from tbl_directorylisting listing Inner Join tbl_companymaster company On listing.company_id= company.company_id 

Pero quiero obtener una compañía.OfferText if listing.Offertext es una cadena vacía, así como si es nula.

¿Cuál es la mejor solución?

Pienso esto:

 SELECT ISNULL(NULLIF(listing.Offer_Text, ''), company.Offer_Text) AS Offer_Text FROM ... 

es la solución más elegante.

Y para desglosarlo un poco en pseudo código:

 // a) NULLIF: if (listing.Offer_Text == '') temp := null; else temp := listing.Offer_Text; // may now be null or non-null, but not '' // b) ISNULL: if (temp is null) result := true; else result := false; 
 SELECT CASE WHEN LEN(listing.OfferText) > 0 THEN listing.OfferText ELSE COALESCE(Company.OfferText, '') END AS Offer_Text, ... 

En este ejemplo, si listing.OfferText es NULL, la función LEN () también debería devolver NULL, pero aún no es> 0.

Actualizar

Aprendí algunas cosas en los 5 años y medio transcurridos desde que publiqué esto, y lo hago de forma muy diferente ahora:

 COALESCE(NULLIF(listing.OfferText,''), Company.OfferText, '') 

Esto es similar a la respuesta aceptada, pero también tiene un respaldo en caso de que Company.OfferText también sea nulo. Ninguna de las otras respuestas actuales que usan NULLIF() también hacen esto.

 Select CASE WHEN listing.OfferText is null or listing.OfferText = '' THEN company.OfferText ELSE COALESCE(Company.OfferText, '') END As Offer_Text, from tbl_directorylisting listing Inner Join tbl_companymaster company On listing.company_id= company.company_id 

Aquí hay otra solución:

 SELECT Isnull(Nullif(listing.offertext, ''), company.offertext) AS offer_text, FROM tbl_directorylisting listing INNER JOIN tbl_companymaster company ON listing.company_id = company.company_id 

Puede usar ISNULL y verificar la respuesta contra el resultado conocido:

 SELECT case when ISNULL(col1, '') = '' then '' else col1 END AS COL1 FROM TEST 

En SQL Server 2012 tiene IIF , por ejemplo, puede usarlo como

 SELECT IIF(field IS NULL, 1, 0) AS IsNull 

De la misma manera puedes verificar si el campo está vacío.

Use la función LEN para verificar valores nulos o vacíos. Puede usar LEN (@SomeVarcharParm)> 0. Esto devolverá falso si el valor es NULL, ” o ”. Esto se debe a que LEN (NULL) devuelve NULL y NULL> 0 devuelve false. Además, LEN (”) devuelve 0. Vea por usted mismo ejecutar:

 SELECT CASE WHEN NULL > 0 THEN 'NULL > 0 = true' ELSE 'NULL > 0 = false' END, CASE WHEN LEN(NULL) > 0 THEN 'LEN(NULL) = true' ELSE 'LEN(NULL) = false' END, CASE WHEN LEN('') > 0 THEN 'LEN('''') > 0 = true' ELSE 'LEN('''') > 0 = false' END, CASE WHEN LEN(' ') > 0 THEN 'LEN('' '') > 0 = true' ELSE 'LEN('' '') > 0 = false' END, CASE WHEN LEN(' test ') > 0 THEN 'LEN('' test '') > 0 = true' ELSE 'LEN('' test '') > 0 = false' END 
 Select Coalesce(NullIf(listing.OfferText, ''), NullIf(company.OfferText, ''), '') As Offer_Text, from tbl_directorylisting listing Inner Join tbl_companymaster company On listing.company_id= company.company_id 

Esta simple combinación de COALESCE y NULLIF debería hacer el truco:

 SELECT Coalesce(NULLIF(listing.OfferText, ''), company.OfferText) As Offer_Text ... 

Nota: Agregue otra cadena vacía como el último argumento COALESCE si desea que la instrucción devuelva una cadena vacía en lugar de NULL si ambos valores son NULL.

Aquí hay una solución, pero no sé si es la mejor …

 Select Coalesce(Case When Len(listing.Offer_Text) = 0 Then Null Else listing.Offer_Text End, company.Offer_Text, '') As Offer_Text, from tbl_directorylisting listing Inner Join tbl_companymaster company On listing.company_id= company.company_id 
 SELECT COALESCE(listing.OfferText, 'company.OfferText') AS Offer_Text, FROM tbl_directorylisting listing INNER JOIN tbl_companymaster company ON listing.company_id= company.company_id 

esta syntax:

 SELECT * FROM tbl_directorylisting listing WHERE (civilite_etudiant IS NULL) 

funcionó para mí en Microsoft SQL Server 2008 (SP3)

Para evitar los registros con valor Empty o Null en el resultado de SQL

simplemente podemos agregar ..... WHERE Column_name != '' or 'null'

 [Column_name] IS NULL OR LEN(RTRIM(LTRIM([Column_name]))) = 0 

Sé que este es un hilo viejo, pero acabo de ver uno de los posts anteriores y no es correcto. Si está utilizando LEN () para determinar si el archivo es NULL o VACÍO , debe usarlo de la siguiente manera:

 ...WHEN LEN(ISNULL(MyField, '')) < 1 THEN NewValue...