Y a-t-il une fonction opposée à ISNULL dans sql server? N'Est pas nulle?

j'ai ce code dans ma déclaration select

ISNULL(a.PolicySignedDateTime,aq.Amount) AS 'Signed Premium',

mais je veux voir si " a. PolicySignedDateTime " n'est pas null. Est-il facile de fonction pour faire ce qui n'implique pas l'aide d'une instruction "if"?

Cheers les gars

27
demandé sur Bobby 2013-10-08 12:31:59

5 réponses

Vous devez utiliser CASE

SELECT CASE WHEN Field IS NOT NULL
    THEN 'something'
    ELSE 'something else'
END
30
répondu Szymon 2013-10-08 08:34:32

il y a L'expression COALESCE (bien que pas de fonction https://msdn.microsoft.com/en-us/library/ms190349.aspx) Testez les arguments dans l'ordre et continuez à le faire jusqu'à ce qu'il trouve la valeur non nulle et la renvoie.



exemple d'utilisation:

SELECT COALESCE(NULL, NULL, 5)--returns 5



Dans ton cas :

COALESCE(a.PolicySignedDateTime,aq.Amount) AS 'Signed Premium',

3
répondu 2016-11-09 09:33:44

essaye ceci:

SELECT
  CASE
    WHEN a.PolicySignedDateTime IS NOT NULL THEN a.PolicySignedDateTime
    ELSE aq.Amount
FROM your joined table

Mais.... ISNULL(un.PolicySignedDateTime, aq.Montant) vérifiez si votre champ est nul, donc n'est pas nul vous obtenez sa valeur.

donc je ne comprends pas vraiment parce que vous voulez utiliser une autre façon.

1
répondu Joe Taras 2013-10-08 08:36:26

il n'y a pas de fonction opposée mais vous pouvez le faire sans CASE.

utilisez le fait qu'une chaîne de caractères + 'quelque chose' sera nulle si string est nulle, et si c'est nul, utilisez ISNULL pour retourner 'somethingelse', récupérez la fin de la valeur retournée avec RIGHT() et vérifiez que contre 'quelque chose' en utilisant NULLIF, puis utilisez COALESCE pour faire ce que vous aimeriez faire si c'est nul (ce qui signifie que la valeur originale n'est pas nulle).

Exemple:

declare @text varchar(20) = 'some text or value'

select COALESCE(NULLIF(RIGHT(ISNULL(@text + 'NOT', 'IS ') + 'NULL', 7), 'NOTNULL'), 'NOT NULL')

Essayez ce code et essayez aussi sans valeur pour @text.

0
répondu Oakgrove 2018-05-11 05:59:39

Depuis nous sommes en SGBD environnement, il est possible d'utiliser ensemble. Ainsi, en supposant que la table a un champ d'identification (id) - clé primaire ou unique et non null, le travail peut être fait de cette façon:

SELECT numeric_field * count(flag_field) AS not_null_flag_numeric_value_or_zero
FROM my_table
GROUP BY id, numeric_field 

si le champ de valeur est du type de caractère données, une fonction de char doit être utilisée. Ainsi, la mise en œuvre pratique de l'approche pourrait être la suivante:

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

un Autre option pour obtenir le signe non NULL en forme de 1 est d'utiliser conversion de la valeur flag_field en bit:

... cast(flag_field as bit) ...

cela fonctionne lorsque la conversion en bit est disponible pour votre type de données flag_field et est utile lorsque vous pouvez considérer les valeurs 0 et NULLs comme la même valeur NO. Représenté par la valeur NULL ou 0 - comme à vous de choisir:

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
0
répondu nakonoro 2018-08-16 14:53:10