program tip

ISNULL (), NVL (), IFNULL () 또는 COALESCE ()와 동등한 SQLite

radiobox 2020. 9. 16. 07:31
반응형

ISNULL (), NVL (), IFNULL () 또는 COALESCE ()와 동등한 SQLite


내 코드에서 다음과 같은 많은 검사를 피하고 싶습니다.

myObj.someStringField = rdr.IsDBNull(someOrdinal) 
                            ? string.Empty 
                            : rdr.GetString(someOrdinal);

다음과 같은 작업을 수행하여 내 쿼리가 null을 처리하도록 할 수 있다고 생각했습니다.

SELECT myField1, [isnull](myField1, '') 
FROM myTable1
WHERE myField1 = someCondition

나는 SQLite를 사용하고 있으며 isnull기능 을 인식하지 못하는 것 같습니다 . 나는 또한 다른 데이터베이스 ( NVL(), IFNULL()COALESCE()) 에서 인식되는 일부 동등한 것들을 시도 했지만 SQLite는 이들 중 어느 것도 인식하지 못하는 것 같습니다.

누구든지 제안이 있거나 더 나은 방법을 알고 있습니까? 불행히도 데이터베이스에는 모든 필드에 대한 기본값이 없습니다. 또한 테이블에 LEFT JOIN일치하는 레코드가 LEFT JOIN존재하지 않기 때문에 반환 된 필드 중 일부가 null이되는 경우에 일부 을 사용해야 합니다.


IFNULL, 여기를 참조하십시오 : http://www.sqlite.org/lang_corefunc.html#ifnull

함수 주위에 대괄호 없음


이 시도

ifnull(X,Y)  

예 :

select ifnull(InfoDetail,'') InfoDetail; -- this will replace null with ''
select ifnull(NULL,'THIS IS NULL');-- More clearly....

ifnull()기능을 모두 인수가 NULL 경우 첫 번째 NULL이 아닌 인수, 또는 NULL의 카피를 돌려줍니다. Ifnull()정확히 2 개의 인수가 있어야합니다. ifnull()함수는 coalesce()두 개의 인수와 동일합니다 .


ISNULL()메서드 가 없으면 대신 다음 식을 사용할 수 있습니다.

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END

이것은 ISNULL(fieldname, 0).


ISNULL () 메서드 대신 WHERE 절에서 IS NULL또는 사용 IS NOT NULL:

SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL

NVL () 및 ISNULL ()에 해당하는 경우 다음을 사용하십시오.

IFNULL(column, altValue)

column : 평가중인 열입니다.

altValue : 'column'이 null 인 경우 반환 할 값입니다.

예:

SELECT IFNULL(middle_name, 'N/A') FROM person;

* 참고 : COALESCE () 함수는 다른 데이터베이스에서와 동일하게 작동합니다.

출처 :


이러한 기능을 쉽게 정의하고 사용할 수 있습니다.

ifnull <- function(x,y) {
  if(is.na(x)==TRUE) 
    return (y)
  else 
    return (x);
}

또는 동일한 축소 버전 :

ifnull <- function(x,y) {if(is.na(x)==TRUE) return (y) else return (x);}

참고 URL : https://stackoverflow.com/questions/799375/sqlite-equivalent-to-isnull-nvl-ifnull-or-coalesce

반응형