필드가 null 인 경우 1900-01-01을 반환하는 SQL Server Isnull


15

DOB 필드가 null 인 경우 다음 코드는 1900-01-01을 반환합니다. 빈 문자열 (``)을 반환하려고했지만 기대하지 않았습니다. 원하는 결과를 얻으려면 어떻게해야합니까?

isnull(convert(date,DOB,1),'')

5
데이터 유형을 너무 많이 혼합하고 있습니다. 기본적으로 NULL날짜를 사용 하여 수행하는 작업 은 SELECT CAST('' AS DATE)입니다. 어떤 데이터 유형 DOB입니까?
Mark Sinkinson

1
그것은 내가 날짜로 변환하는 varchar 데이터 타입이다
Juan Velez

5
나는 이것이 오래된 게시물이라는 것을 알고 있지만 응용 프로그램 레이어가 대신 데이터를 SQL 형식으로 포맷하려고하는 것처럼 보입니다. 시간의 99.9 %가 응용 프로그램 계층에서 서식을 지정하도록하는 것이 좋습니다.
Erik

답변:


20

에서 DATE값 유형을 반환하므로 빈 문자열을 얻을 수 없습니다 ISNULL.

MSDN ,ISNULL

check_expression과 동일한 유형을 반환합니다. 리터럴 NULL이 check_expression으로 제공되면 replacement_value의 데이터 유형을 리턴합니다. 리터럴 NULL이 check_expression으로 제공되고 replacement_value가 제공되지 않으면 int를 리턴합니다.

값이인지 여부를 확인하는 경우 NULL날짜 값을 반환하지 않으려는 경우가 아니라면 값을 날짜로 변환 할 필요가 없습니다.

대신 다음을 사용하십시오.

SELECT ISNULL( DOB , '')

어느 것이 돌아올 것인가

''

값이면 NULL.

NULL날짜입니다 NULL(값). 반면 빈 문자열은로 평가되며 0, SQL Server에서는 이후의 일 수를 나타내는 정수 1900-01-01입니다.


-3

채워질 때 DOB에 대한 값을 리턴하려는 경우 채워진 DOB가 없으면 널값을 제거하십시오. 시도해 볼 수 있지만 DOB는 날짜 유형이 아닌 varchar입니다.

isnull(cast(cast(DOB as date)as varchar),'') as DOB   (SQL SERVER)

2
a VARCHAR를 a로 캐스팅 DATE하고 다시 a 로 캐스팅하는 VARCHAR것은 의미가 없습니다. 그 말도 안되는 소리를 제거하면 대답은 적은 설명으로 받아 들여진 대답과 같습니다.
에릭

예, 귀하의 시나리오에서는 의미가 없지만 내가 사용한 시나리오에서는에서 시작하여 datetime날짜 만 필요했습니다 YYYY-MM-DD. 그래서 date시간을 버리면서 캐스팅 합니다. 그런 다음 기능을 varchar사용할 수 있도록 캐스팅합니다 isnull. 그래서 여전히 채워진 레코드의 날짜를 얻고 null 값을 제거합니다. 그렇지 않으면, 나는 얻고 있었다 1900-01-01 00:00:00.000.
Elvis Candelaria

1
그것은 내 시나리오가 아니라 질문의 시나리오입니다. 나는 그것이 당신이 다운 투표를 수집하는 이유라고 생각합니다. 실제로 다른 질문에 대답하려고합니다.
에릭

그래 당신 말이 맞아요. 나는 그것을 잘못 읽었다. 내 잘못.
엘비스 칸델라 리아

-3

NULL 날짜를 공백으로 변환합니다. 응용 계층 (Excel)은 공간을 잘 처리합니다.

ISNULL (CONVERT(varchar(50), w.TRANSACTIONDT, 120), '')  as wTRANSACTIONDT

-3

그냥보기를 만드십시오

year (DOB) <= 1900 인 경우 SELECT VIEW test_view
AS
SELECT 경우 null 그렇지 않으면 DOB가 DOB, sometext, id test로 끝납니다.

원래 테이블 대신 사용하십시오 : select * from test_view


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.