2014-04-30 3 views
1

열 값이 비어 있지 않은 테이블에서 레코드를 가져 오려고합니다.Oracle - 비어 있지 않은 값 가져 오기

는 다음과 같은 데이터 포인트

**my_table (table_name)** 

**my_column(column_name)** 
abc 
def 
null 

그래서 내가 비어 있거나 null이 아닌 레코드를 찾으려면 XYZ를 가정합니다. 기본적으로 내 출력이 그래서 주변 검색을 시도 0 기록

을 반환

select * from my_table where my_column!=null & my_column!=''; 

내가 뭘하려

abc 
def 
xyz 

가되어야하며 오라클은 빈 문자열이 null를 취급 발견하고 사용 다음 검색어

select * from my_table where trim(my_column) is not null; 

이렇게하면 null 값이있는 레코드를 제외한 모든 결과가 반환됩니다. 이자형.

빈 문자열까지도 결과에서 사라지 길 원합니다. 위에서 가능한 모든 조합을 시도했지만 원하는 결과를 얻지 못하고 있습니다. my_column 가정

답변

1

방금 ​​당신은 확인하고 싶지는 않을 것

SELECT * 
    FROM my_table 
WHERE my_column IS NOT NULL 

를 원하는 것처럼 소리하는 VARCHAR2입니다 my_column = null 또는 my_column != null 여부. my_column의 값과 관계없이 해당 술어는 항상 false로 평가됩니다. 어떤 값도 NULL과 같지 않으며 어떤 값도 NULL과 같지 않으며 또 다른 NULL 값과 동일하지 않습니다. 오라클에는 빈 문자열 개념이 없습니다. NULL이 있거나 하나 이상의 공백이나 다른 필러 문자가 포함 된 문자열이 있습니다. 따라서 값이 비 었는지 여부를 확인할 필요가 없습니다. NULL인지 확인하십시오.

+0

감사합니다. 저스틴. 이 쿼리의 유일한 문제점은 웹의 여러 위치에서 언급 한 것처럼 공백 값을 null로 평가하지 않는다는 것입니다. 나도 당신이 SELECT 쿼리를 수정하려고 시도 * FROM my_table 어디 trim (my_column)가 아닌가; 여전히 출력으로 빈 문자열을 출력합니다. – user2686860

+0

@ user2686860 -'덤프 (my_column) from my_table'은 실제로 해당 열에 저장되어 있다는 것을 보여줍니다. 문제의 행에 공백이 아닌 다른 행이있는 것으로 보입니다. –

+0

흥미 롭습니다. 그것은 나를 보여줍니다 Typ = 1 Len = 1 : 30. 그게 뭔지 전혀 몰라요. – user2686860

관련 문제