사양에 따라 SQL 날짜 유형 범위가 없습니까?
-
06-07-2019 - |
문제
에 따르면 MSDN 날짜 데이터 유형의 범위는 1753 년 1 월 1 일, 9999 년 12 월 31 일입니다.
SQL2005에서 다음은 흥미 롭습니다.
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'
날짜를 변경하십시오 '1/1/1901 12:00:00 AM'
그리고 갑자기 isnull(@date,0)
0입니다.
내가 무엇을 놓치고 있습니까?
(편집) SQL2005의 고정 Dateange, SQL2005 BOL 링크
해결책
이 시도:
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
다른 팁
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()
변환 기능입니다. 값이 있는지 확인하는 것은 아닙니다 NULL
.
날짜에는 숫자 표현이 있습니다. 숫자 표현 '1/1/1901 12:00:00 AM'
발생합니다 0
, SQL Server에서.
결과를 비교할 수 없습니다 ISNULL(@date,0)
에게 0
다음으로 표시 될 수있는 날짜를 구별하는 능력을 잃지 않고 0
그리고 날짜입니다 NULL
.
아래 코드 라인은 오해의 소지가 있습니다.
if (isnull(@date,null) = 0) SELECT 'date is null' ELSE SELECT 'date not null'
이 줄은 0이됩니다 @date
== 0, ~ 아니다 그것이 널 일 때. 지정된 날짜는 DateTime에서 0으로 저장됩니다.
SELECT convert(datetime, 0)
내가 의미하는 바를보기 위해!
나는 이것을 시도했다 :
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'
거기 있습니다 아무것도 아님 Isnull이나 Coalesce에 잘못. 문제는 당신이 Zero와 비교하고 있고, 당신은 isnull이 시작되었다고 생각하는 데 자신을 속이는 것입니다. 내 코드를 시도하고 Isnull이 올바른 값을 반환한다는 것을 알 수 있습니다.
제휴하지 않습니다 StackOverflow