SQL에서 coalesce() 사용하기

어제 Zeppelin 의 Dynamic form 사용해보기 (Text Input)을 페이스북에 올렸더니, David Park 님이 코멘트를 주셨다.

그래서 넣어봄. 근데 에러남. no viable alternative at input 'coalesce(,'
하나 하나 고치다 보니 다양한 에러를 뱉길래 오기가 생겨 다 넣어봤다.

인풋 타입 조정하기

  1. input에 들어오는 것은 그때 그때 달라지는 것 같다. 텍스트를 넣으면 varchar, 숫자를 넣으면 integer.
  2. {$end_date}2018-01-01을 넣으면 2016이 된다. '{$end_date}' 로 묶으면 2018-01-01이 된다.
  3. 매번 입력폼에다 '2018-01-01' 이라고 넣는건 매우 비효율적이라고 생각되어 인자를 따옴표로 묶었다.

아웃풋 타입 맞추기

  1. All COALESCE operands must be the same type: varchar
    입력받은 인자가 무엇이든 varchar로 바꾸고 보니, coalesce(varchar, date) 가 되어버려서 타입이 맞지 않는다는 에러를 뱉는다.

  2. Value cannot be cast to date:
    varchar를 date로 변환하라고 하고, 빈칸으로 두니까 empty string이 되어버려서 날짜로 바꿀 수 없다는 에러를 뱉는다. 그렇다. null과 empty는 다른 것이다.

인자 바꿔보기

  1. coalesce(A,B) 는 A인자가 null 인 경우, B를 출력하는 함수다보니, coalesce(current_date, date '${end_date}') 로 입력하는 경우엔 뒤에 인풋을 빈칸으로 하든 날짜를 넣든 오늘 날짜만 출력된다. 괜한짓을 했다.

테스트를 다 하고보니, Dynamic form의 체크박스나 드롭다운의 경우는 입력데이터의 타입을 컨트롤할 수 있지만, input의 경우 다양한 값이 들어올 수 있어 특히나 날짜를 다루는 경우에는 coalesce 으로 빈칸에 대한 예외처리를 하기가 어려워 보인다.

적게 일하고 많이 버는 법을 늘 고민합니다. 일이 되게 하는 것에 간혹 목숨을 겁니다. 지금은 우아한형제들과 함께 일하고 있어요.