평점평균 의 경우 체크방법 0 5 1,362

by 김대영 [SQL Query] [2017.02.23 21:34:17]


지원자의 평점을 입력하는 화면을 개발하고 있습니다.
평점평균 의 경우 
  3.0 , 3.1  과 같이  X.X  or X.XX 의 형태로만 숫자로만 입력받아야 하는데
  이름 체크하려면  오라클 함수로 어떻게 구현해야 할까요?

   1) #.XX  #.X 의 형태로만 이루어 짐 
   2) # 는 숫자 1자리
   3) . 이 반드시 포함
   4)X , XX 는 숫자2자리로만 입력받아야 함.


   매개변수로 값을 받아서 , 유효한 값이면 Y, 유효하지 않은 경우 N 을 리턴받고자 합니다. 

  

by jkson [2017.02.23 22:06:16]
with t as
(
select '3.5' grade from dual union all
select '3.55' grade from dual union all
select '3a55' grade from dual union all
select '3.555' grade from dual union all
select '33.5' grade from dual union all
select 'a.5' grade from dual union all
select '3.aa' grade from dual
)
select case when regexp_like(grade,'^[0-4]\.([0-9]|[0-9]{2})$') --마농님 댓글 보고 일단 4점대까지만 나오는 걸로 수정.. 그렇다고 하더라도 4.99는 없을텐데..;
            then 'Y'
            else 'N'
       end chk, grade
  from t

 


by 마농 [2017.02.24 09:20:49]

X.XX 의 포멧 체크 외에.
숫자 범위도 체크해야 할 듯 하네요?
9.99 와 같은 평점은 없겠죠?
그리고 3.0 이 아닌 3 을 입력한 경우에 이게 유효한지 아닌지 판단이 필요할 듯.


by jkson [2017.02.24 10:10:54]

어차피 function으로 만드신다고 하셨으니 좀 절차적으로 나눠서 해야겠네요.

create or replace function fn_check_grade(in_grade varchar2)
return varchar2
is
v_chk varchar2(1);
begin
    
    select case when regexp_like(in_grade,'^[0-4]\.([0-9]|[0-9]{2})$') then 'Y'
                else 'N'
           end
      into v_chk
      from dual;
      
    if v_chk = 'N' then
       return 'N';
    end if;
    
    if to_number(in_grade) not between 0 and 4.5 then --가능한 평점대 지정
       return 'N';
    end if;
    
    return 'Y';
    
end;

 


by 김대영 [2017.02.24 11:36:16]

3.0 이 아닌 3 을 입력한 경우에 이게 유효하게 하려면 어떻게 해야 할까요 ?


by jkson [2017.02.24 11:57:23]

숫자로 0~4.5까지면 되나요?

create or replace function fn_check_grade(in_grade varchar2)
return varchar2
is
v_chk varchar2(1);
begin
    
    select case when to_number(in_grade) between 0 and 4.5 then 'Y' else 'N' end
      into v_chk
      from dual;
      
    return v_chk;
exception
    when others then
        return 'N';    
end;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입