programing

null이 아니거나 빈 문자열이 아닌지 테스트할 호환 SQL

skycolor 2023. 6. 21. 22:28
반응형

null이 아니거나 빈 문자열이 아닌지 테스트할 호환 SQL

Oracle 데이터베이스와 Microsoft SQL Server 모두에 대해 호환되는 SQL을 원합니다.

null이 아니고 빈 문자열이 아닌 경우 true를 반환하는 호환되는 SQL 식을 원합니다.

사용하는 경우:

column <> ''

Microsoft SQL Server에서는 작동하지만 Oracle 데이터베이스에서는 작동하지 않습니다("는 Oracle의 경우 null이므로).

사용하는 경우:

len(column) > 0

Microsoft SQL Server에서는 작동하지만 Oracle 데이터베이스에서는 작동하지 않습니다(길이()를 사용하므로).

NULLIFOracle(doc)과 SQL Server(doc) 모두에서 사용할 수 있습니다.이 표현식은 다음과 같이 사용할 수 있습니다.

NULLIF(column, '') IS NOT NULL

두 서버 모두에서, 다음과 같은 경우column이라NULL그 다음의 산출물NULLIF그냥 통과할 것입니다.NULL…을 통하여 가치를 보다SQL 서버에서'' = ''그래서 의 산출물.NULLIF될 것이다NULL오라클의 경우,''이미NULL그래서 그것은 통과됩니다.

다음은 SQL Server 2008 R2 Express에서 테스트한 내용입니다.

WITH SampleData AS
    (SELECT 1 AS col1, NULL AS col2
     UNION ALL
     SELECT 2, ''
     UNION ALL
     SELECT 3, 'hello')
SELECT *
  FROM SampleData
 WHERE NULLIF(col2, '') IS NOT NULL;

다음은 Oracle 10g XE에 대한 테스트 사례입니다.

WITH SampleData AS
    (SELECT 1 AS col1, NULL AS col2 FROM DUAL
     UNION ALL
     SELECT 2, '' FROM DUAL
     UNION ALL
     SELECT 3, 'hello' FROM DUAL)
SELECT *
  FROM SampleData
 WHERE NULLIF(col2, '') IS NOT NULL;

둘 다 리턴3역시

어때.

CASE WHEN column = '' THEN NULL ELSE column END IS NOT NULL

여기서 핵심은 빈 문자열이 NULL과 동일한 경우와 그렇지 않은 경우를 구분하는 것입니다.

WHERE CASE WHEN '' = '' THEN -- e.g., SQL Server this is true
              CASE WHEN col <> '' AND col IS NOT NULL THEN 'Y'
                   ELSE 'N'
              END
           WHEN COALESCE(col,NULL) IS NOT NULL THEN 'Y' -- Not SS, e.g., Oracle
           ELSE 'N'
      END = 'Y';

첫 번째 경우가 참이면 빈 문자열이 null과 동일하지 않으며, 문자열이 null이 아닌지와 문자열이 빈 문자열이 아닌지 모두 테스트해야 합니다.그렇지 않으면 빈 문자열과 null이 동일하게 평가되기 때문에 작업이 더 쉽습니다.

@DCookie의 답변을 단축하기 위한 시도.나는 그의 것을 좋아합니다.( '' = '' )시험.

CASE WHEN ( '' = '' ) THEN ( column <> '' )
                      ELSE ( column = column )
END

슬프게도, 위의 것들은 작동하지 않을 것입니다.다음은 SQL-Server에서 작동합니다.지금 Oracle에서 테스트할 수 없습니다.

CASE WHEN  '' = ''  THEN CASE WHEN column <> ''    THEN 1 ELSE NULL END 
                    ELSE CASE WHEN column = column THEN 1 ELSE NULL END 
END

다음과 같이 쓸 수도 있습니다.

    ( '' = ''    AND column <> '' )
 OR ( '' IS NULL AND column = column ) 

언급URL : https://stackoverflow.com/questions/6457710/compatible-sql-to-test-for-not-null-and-not-empty-strings

반응형