null이 아니거나 빈 문자열이 아닌지 테스트할 호환 SQL
Oracle 데이터베이스와 Microsoft SQL Server 모두에 대해 호환되는 SQL을 원합니다.
null이 아니고 빈 문자열이 아닌 경우 true를 반환하는 호환되는 SQL 식을 원합니다.
사용하는 경우:
column <> ''
Microsoft SQL Server에서는 작동하지만 Oracle 데이터베이스에서는 작동하지 않습니다("는 Oracle의 경우 null이므로).
사용하는 경우:
len(column) > 0
Microsoft SQL Server에서는 작동하지만 Oracle 데이터베이스에서는 작동하지 않습니다(길이()를 사용하므로).
NULLIF
Oracle(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
'programing' 카테고리의 다른 글
어떤 숫자가 다른 숫자로 구분되는지 어떻게 확인합니까? (0) | 2023.06.21 |
---|---|
체크아웃을 취소하려면 어떻게 해야 합니까? (0) | 2023.06.21 |
오라클의 rownum처럼 mysql에서 행 번호를 가져올 수 있는 방법이 있습니까? (0) | 2023.06.21 |
Git 병합 충돌 시 생성되는 BACKUP, BASE, LOCAL 및 REMOTE 파일은 무엇입니까? (0) | 2023.06.21 |
SQL 구문에 오류가 있습니다(MySQLi SQL 예외가 발견되지 않음).다른 답변을 시도했지만 실패했습니다. (0) | 2023.06.21 |