2017-12-18 3 views
1

빈 셀을 처리하고 PostgreSQL에서 쿼리 할 때 "빈"문자열과 같은 것으로 채워진 빈 셀로 데이터를 가져 오려고합니다. 내 쿼리는 다음과 같습니다PostgreSQL에서 쿼리 할 때 빈 셀을 "Blank"로 바꾸어야합니다.

SELECT t_id, a_date, c_date, o_s_date, o_e_date, 
    ttr_hr, ttn_min, d_sub_outage_impact, 
    tkt_source, d_vertical, d_grp, city, state 
FROM r.all_t_event b 

    Left Outer Join(
    select i_number,status,o_group 
    From r.hpd_help_desk 
    Group by i_number,status,o_group) a on a.i_number =b.t_id 
Where close_date >= to_timestamp('10/05/2017','mm/dd/yyyy') 
and t_condition = 'Outage' 
and (a_grp like '%NOC%' or a.o_group like '%NOC%') 
and t_id not in ('INC8788','INC26116') 
and a.status = '5' 

는 SELECT 문에서 CASE 문을 많이 시도하지만, 난 항상 같은 오류 뭔가 얻을 : 내가 좋아하는 뭔가를 시도 할 때 언제 ","ERROR에서 구문 오류 또는 근처 " :

CASE 
WHEN d_outage_min = " " then "blank" else d_outage_min 
WHEN v_outage_min = " " then "blank" else v_outage_min //Error occurred here 
.....END 

그리고 오류 같은 것을 가지고 : 나는 시도 "ERROR에서 구문 오류 또는 근처에"CASE "

CASE 
WHEN d_outage_min = " " then "blank" else d_outage_min 
END 

CASE //Error occurred here 

WHEN v_outage_min = " " then "blank" else v_outage_min 
END 
CASE...END 

하는/병합 문 구문/어떤 방법을 가지고 기쁠 것 도움이 될 수 있습니다. 다시 한번 감사드립니다!

+0

' "빈"'한 식별자가 아닌 문자열 : https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS –

+0

[답변을 얻었습니까?] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

+0

나는 COALESCE로 대답했습니다. 타임 스탬프와 숫자 형 필드에 대해 전체 쿼리를 수정하기 위해 더 많은 작업을해야했습니다.매우 많은 도움을 주신 귀하의 모든 의견에 감사드립니다! 지연된 응답에 대해 사과드립니다. –

답변

0

사례는 다음 두 가지 방식으로 작동합니다. 첫 번째 방법은 테스트가 각 행 반복 될 때입니다.

CASE 
    WHEN name = 'john' then 1 
    WHEN address LIKE '% road' then 2 
    WHEN somecolumn > somevalue THEN 3 
    ELSE 4 
END 

CASE 및 END를 시작 및 종료 마커로 생각하십시오. 표식 사이의 각 줄은 형식이어야합니다. WHEN {logical test that is true or false} THEN {value to return if true}

각 줄에는 ELSE를 사용할 수 없습니다. 테스트가 거짓이면 다음 테스트가 실행됩니다. 테스트

당신은 다른 일을 할 수있을 때, 서로를 발행하지 첫 번째 줄에 else가 넣어, 포스트 그레스 당신이 경우 블록을 종료하려면 기다리고 있었다, - 당신이 최초의 "언제 근처 오류"를 가지고 왜 입니다 마지막으로. true가 된 것이 없으면 ELSE에 의해 리턴 된 값이 제공됩니다. 더 ELSE가없는 경우는 null


두 번째 방법은 하나 개의 변수가 다른 다수의 시험을 짧은 형식 호환 형을해야

그러면 다음에 지정한 모든 값/열

주어집니다 값 :

CASE gender 
    WHEN 'male' THEN 1 
    WHEN 'female' THEN 2 
    ELSE 'not specified' 
END 

CASE 
    WHEN gender = 'male' THEN 1 
    WHEN gender = 'female' THEN 2 
    ELSE 'not specified' 
END 

에 해당 그리고 모든 샘 전자 규칙이 적용됩니다. 짧은 양식을 사용하는 경우 양식을 절반으로 전환 할 수 없습니다. 모든 WHEN 문은 값만 포함하며 "같음"테스트로 CASE 뒤에 선언 된 값과 비교됩니다.이 양식은 자주 사용되지 않으며 일부 DB에서는 구현되지 않습니다.

두 번째 오류 (예 : "CASE"오류)는 두 개의 case 문을 별도로 사용하지 않고 문자열 연결, 또는 유착 많은 인자를받는 함수가


쉼표, 그것은 null이 아닌 첫 번째에 제공된 인수를 스캔하고

COALESCE(anullcolumn, anothernull, athirdnull, anonnull) -- the value of anonnull will be returned 

이 개념입니다 반환

에 해당 모든 엉망이되는 사건 문에 의한 이러한 구문 오류를 수정하면, 컴파일러가 문자열과 시작을 검사로 이동합니다 읽고 어윈이 지적한 것처럼

를 작성하는 더 좋은

CASE 
    WHEN anullcolumn IS NOT NULL THEN anullcolumn 
    WHEN anothernull IS NOT NULL THEN anothernull 
    WHEN athirdnull IS NOT NULL THEN athirdnull 
    WHEN anonnull IS NOT NULL THEN anonnull 
END 

그냥 많은 그들에 대해 불평. 하지 연설 마크 포스트 그레스는 대소 문자를 구분 테이블 및 열 이름을 표시하기 위해 음성 마크를 사용

'This is a string in sql' 
"Not a string" 

에게, SQL에서 문자열을 나타 내기 위해 아포스트로피를 사용합니다. 로 구분

CASE 
WHEN d_outage_min = ' ' then 'blank' else d_outage_min 
END as d_outage_min, 
CASE 
WHEN v_outage_min = ' ' then 'blank' else v_outage_min 
END as v_outage_min 

두 경우 문 (하나의 공백 문자) 빈 수 있습니다 열당 하나 : 당신이


귀하의 시도가 같아야합니다 도움이 될 수 있으면 사용하지 마십시오 쉼표

null과 공백은 다른 점에 유의하십시오! 열이 NULL 인 경우 단일 공백 ​​문자에 대해 테스트하면 효과가 없습니다! 이것은 그들이 널 (null) 인 경우는, 그것들을 테스트하는 방법입니다

CASE 
WHEN d_outage_min IS NULL then 'blank' else d_outage_min 
END as d_outage_min, 
CASE 
WHEN v_outage_min IS NULL then 'blank' else v_outage_min 
END as v_outage_min 

또는

COALESCE(d_outage_min, 'blank') as d_outage_min, 
COALESCE(v_outage_min, 'blank') as v_outage_min 

합체가 컴팩트하다. 열이 null 인 경우에만 작동합니다. 단일 공백 ​​문자 인 경우 대소 문자를 사용해야합니다.

0

일반 구문 오류입니다. 은 작은 따옴표 (''),하지 식별자을 표시 따옴표 ("")를 필요로한다. 작동 방식 :

CASE WHEN d_outage_min = ' ' THEN '"blank"' ELSE d_outage_min END 

"공백"은 하나의 공백을 의미한다고 가정합니다. 빈 문자열의 경우 ''을 사용하고 NULL의 경우 COALESCE()을 사용하십시오.

Read the manual here.

관련 문제