DOB 필드가 null 인 경우 다음 코드는 1900-01-01을 반환합니다. 빈 문자열 (``)을 반환하려고했지만 기대하지 않았습니다. 원하는 결과를 얻으려면 어떻게해야합니까?
isnull(convert(date,DOB,1),'')
DOB 필드가 null 인 경우 다음 코드는 1900-01-01을 반환합니다. 빈 문자열 (``)을 반환하려고했지만 기대하지 않았습니다. 원하는 결과를 얻으려면 어떻게해야합니까?
isnull(convert(date,DOB,1),'')
답변:
에서 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
입니다.
채워질 때 DOB에 대한 값을 리턴하려는 경우 채워진 DOB가 없으면 널값을 제거하십시오. 시도해 볼 수 있지만 DOB는 날짜 유형이 아닌 varchar입니다.
isnull(cast(cast(DOB as date)as varchar),'') as DOB (SQL SERVER)
VARCHAR
를 a로 캐스팅 DATE
하고 다시 a 로 캐스팅하는 VARCHAR
것은 의미가 없습니다. 그 말도 안되는 소리를 제거하면 대답은 적은 설명으로 받아 들여진 대답과 같습니다.
datetime
날짜 만 필요했습니다 YYYY-MM-DD
. 그래서 date
시간을 버리면서 캐스팅 합니다. 그런 다음 기능을 varchar
사용할 수 있도록 캐스팅합니다 isnull
. 그래서 여전히 채워진 레코드의 날짜를 얻고 null 값을 제거합니다. 그렇지 않으면, 나는 얻고 있었다 1900-01-01 00:00:00.000
.
NULL
날짜를 사용 하여 수행하는 작업 은SELECT CAST('' AS DATE)
입니다. 어떤 데이터 유형DOB
입니까?