validar - isnull sqlserver
¿Hay una función opuesta a ISNULL en el servidor SQL? Hacer ¿No es nulo? (5)
Existe la expresión COALESCE (aunque no es función https://msdn.microsoft.com/en-us/library/ms190349.aspx ) prueba los argumentos en orden y sigue haciéndolo hasta que encuentre el valor no NULL y lo devuelva.
ejemplo de uso:
SELECT COALESCE(NULL, NULL, 5)--returns 5
En tu caso :
COALESCE(a.PolicySignedDateTime,aq.Amount) AS ''Signed Premium'',
Tengo este código en mi declaración selecta
ISNULL(a.PolicySignedDateTime,aq.Amount) AS ''Signed Premium'',
Pero quiero ver si "a.PolicySignedDateTime" no es nulo. ¿Existe una función fácil para hacer esto que no implique el uso de una declaración "if"?
Animo amigos
No hay una función opuesta, pero puedes hacerlo sin CASE
.
Use el hecho de que una cadena + ''algo'' será NULL si la cadena es NULL, y si eso es nulo, use ISNULL para devolver ''somethingelse'', obtenga el final del valor devuelto con RIGHT () y verifique que contra ''algo'' use NULLIF, y luego use COALESCE para hacer lo que le gustaría hacer si es NULL (lo que significa que el valor original no es nulo).
Ejemplo:
declare @text varchar(20) = ''some text or value''
select COALESCE(NULLIF(RIGHT(ISNULL(@text + ''NOT'', ''IS '') + ''NULL'', 7), ''NOTNULL''), ''NOT NULL'')
Pruebe este código y también inténtelo sin valor para @text.
Prueba esto:
SELECT CASE WHEN a.PolicySignedDateTime IS NOT NULL THEN a.PolicySignedDateTime ELSE aq.Amount FROM your joined table
Pero ... ISNULL (a.PolicySignedDateTime, aq.Amount) verifica si tu campo es nulo, por lo que no es nulo, obtienes su valor.
Así que realmente no entiendo porque quieres usar otra manera.
Tienes que usar CASE
SELECT CASE WHEN Field IS NOT NULL
THEN ''something''
ELSE ''something else''
END
Dado que estamos en el entorno DBMS, es posible utilizar un enfoque basado en conjuntos. Entonces, asumiendo que la tabla tiene un campo identificador (id) - clave principal o única y no nula, el trabajo se puede hacer de esta manera:
SELECT numeric_field * count(flag_field) AS not_null_flag_numeric_value_or_zero
FROM my_table
GROUP BY id, numeric_field
Si el campo de valor es del tipo de datos de caracteres, debe utilizarse alguna función char. Por lo tanto, la implementación práctica del enfoque podría ser la siguiente:
SELECT * INTO #temporary_table
FROM
(VALUES
(1, 1, 111, ''string_1''),
(2, NULL, 222, ''string_2'')
) data_table(id, flag_field, numeric_field, character_field)
ALTER TABLE #temporary_table ADD CONSTRAINT tab_pk PRIMARY KEY (id)
SELECT
count(flag_field) AS is_not_null,
numeric_field * count(flag_field) AS numeric_value_or_zero,
numeric_field * nullif(count(flag_field), 0) AS numeric_value_or_null,
left(character_field, len(character_field) * count(flag_field)) AS character_value_or_empty,
stuff(character_field, nullif(count(flag_field), 0), 0, '''') AS character_value_or_null
FROM #temporary_table
GROUP BY id, numeric_field, character_field
--DROP TABLE #temporary_table
Otra opción para obtener el signo NOT NULL en forma de 1 es usar la conversión del valor de flag_field a bit:
... cast(flag_field as bit) ...
Esto funciona cuando la conversión a bit está disponible para su tipo de datos flag_field y es útil cuando puede considerar valores 0 y valores nulos como el mismo SIN VALOR. Representado por NULL o 0, como usted elija:
SELECT
nullif(cast(flag_field as bit), 0) AS is_not_null_or_null,
isnull(cast(flag_field as bit), 0) AS is_not_null_or_zero,
numeric_field * nullif(cast(flag_field as bit), 0) AS value_or_null,
numeric_field * isnull(cast(flag_field as bit), 0) AS value_or_zero
FROM #temporary_table