Question

Selon MSDN , la plage de le type de données est du 1er janvier 1753 au 31 décembre 9999

En SQL2005, les éléments suivants sont intéressants:

declare @date as datetime
SET @date = '1/1/1901 12:00:00 AM'
SELECT @date

if (isnull(@date,0) = 0) SELECT 'date is null' ELSE SELECT 'date not null'

changez la date en '1/1/1901 12:00:00 AM' et tout à coup isnull (@ date, 0) vaut 0.

Qu'est-ce qui me manque?

(Éditer) daterange fixe pour sql2005, lien vers sql2005 BOL

Était-ce utile?

La solution

Essayez ceci:

declare @date as datetime
SET @date = '1/1/1901 12:00:00 AM'

SELECT @date, CASE WHEN @date IS NULL THEN 'date is null' ELSE 'date not null' END

Autres conseils

declare @date as datetime
SET @date = '1/1/1901 12:00:00 AM'
SELECT @date

if @date is null SELECT 'date is null' ELSE SELECT 'date not null'

ISNULL () est une fonction de conversion. Ce n'est pas la vérification si une valeur est NULL .

Une date a une représentation numérique. La représentation numérique de '1/1/1901 12:00:00 AM' se trouve être 0 , sur SQL Server.

Vous ne pouvez pas comparer le résultat de ISNULL (@ date, 0) à 0 sans perdre la possibilité de distinguer une date pouvant être représentée par 0 et une date NULL .

La ligne de code ci-dessous est trompeuse:

if (isnull(@date,null) = 0) SELECT 'date is null' ELSE SELECT 'date not null'

Cette ligne renvoie 0 si @date == 0, pas lorsqu'elle est nulle. La date que vous avez spécifiée est stockée à 0 dans une date et heure.

SELECT convert(datetime, 0)

pour voir ce que je veux dire!

J'ai essayé ceci:

declare @date as datetime
SET @date = '1/1/1901 12:00:00 AM'
SELECT @date, CONVERT(numeric(9,3), @date) as DateValue
if (isnull(@date,0) = 0) SELECT 'date is zero' ELSE SELECT 'date not equal to zero (THIS PRINTS)'
if (isnull(@date,0) = 365) SELECT 'date is 365 (THIS PRINTS)' ELSE SELECT 'date not equal to zero'
if (@date = 365) SELECT 'date is 365 (THIS PRINTS)' ELSE SELECT 'date not 365'

SET @date = '1/1/1900 12:00:00 AM'
SELECT @date, CONVERT(numeric(9,3), @date) as DateValue
if (isnull(@date,0) = 0) SELECT 'date is equal to Zero (THIS PRINTS)' ELSE SELECT 'date not null'
if (@date = 0) SELECT 'date is equal to Zero (THIS PRINTS)' ELSE SELECT 'date not null'

Il n'y a rien avec ISNULL ni avec COALESCE. Le problème est que vous comparez à zéro et que vous vous trompez en pensant que l'ISNULL est entré en jeu. Essayez mon code et constatez que ISNULL renvoie la valeur correcte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top