[Oracle] 조회수/시청수 계산, 숫자 소수점 찍기

 

개발업무 도중 영상의 시청건수를 노출해야 하는데 100건 이상부터 노출해야하고,

-천단위 쉼표 표기 ex)1,000회

-만단위 소수점 표기 ex)1.1만회, 10.1만회...

-억단위 소수점 표기 ex)1.1억회... 

 

를 각각 적용해서 노출할 수 있게 해달라는 니즈가 있었다.

 

아래 처럼 구현할 수 있었다.

TO_CHAR함수 내에 'FM'은 자리수가 모자를 경우 앞에 공백을 제거하도록 도와준다. 

 

SELECT CASE WHEN &1 >= 100000000 THEN TO_CHAR (TRUNC(&1/100000000), 'FM999,990')||'.'|| SUBSTR(&1, -8, 1)||'억회' 
            WHEN &1 >= 10000 THEN TO_CHAR (TRUNC(&1/10000), 'FM999,990')||'.'|| SUBSTR(&1, -4, 1)||'만회' 
            WHEN &1 >= 100 THEN ''||TO_CHAR (&1, 'FM999,990')||'회' 
            ELSE '' END VIEW_CNT_STR 
  FROM DUAL;

'Oracle' 카테고리의 다른 글

오라클 [select 기본 구분, 주요 내장함수, 집계함수]  (0) 2020.01.19

- 오라클 [select 기본 구분, 주요 내장함수, 집계함수]

 

1. SELECT 기본구문 

 

● scott User로 로그인
SQL> conn scott/tiger

● 접속되어있는 계정이 관리하는 Table목록
SQL> select * from tab;

● 테이블 구조
SQL> desc dept;
SQL> describe dept;

● 중복제거 출력
SQL> select distinct job from emp;

● 특정 날짜 이후의 데이터 출력
SQL> select * from hiredate >= '2015/01/01';

● not: 부서 번호가 10이 아닌 사원
SQL> select * from emp where deptno <> 10;
SQL> select * from emp where not(deptno = 10);

●between: 급여가 1000 ~ 3000  사이인 사원
SQL> select * from emp where sal >= 1000 and sal <= 3000;
SQL> select * from emp where sal between 1000 and 3000;

●이름이 'K'로 끝나는 사원
SQL> select * from emp where ename like '%K';

●이름에 'K'가 들어가는 사원
SQL> select * from emp where ename like '%K%';

●두번째 글자에'K'가 들어가는 사원
SQL> select * from emp where ename like '_K%';

●컬럼 값이 null 인 데이터,  null 이 아닌 데이터
SQL> select a from emp where comm is null;
SQL> select a from emp where comm is not null;


2. 주요 내장함수


● 샘플 테이블
SQL> select * from dual;

● 임시 계산 결과 출력
SQL> select 200*30  < 오류
SQL> select 200*30 from dual;

● 반올림: round()

SQL> select round(12.34567, 3) from dual;

● 소문자: lower()

SQL> select lower('Java') as "소문자" from dual;

● 대문자: upper()

SQL> select upper('Java') as "대문자" from dual;

● 단어의 첫자만 대문자: Initcap()

SQL> select initcap('java') as "첫글자만" from dual;

● 문자열 연결: concat()

SQL> select concat('ja','va') from dual;

● 문자열 길이: length(), lengthb()

SQL> select length('JavaEx'),length('자바익스'),lengthb('자바익스프레스') from dual;

● 문자열의 추출: substr()

SQL> select substr('JavaEx', 1, 3) from dual;

● 인덱스 추출: instr()

SQL> select instr('JavaEx','Ex') from dual;

● 자리 채우기 : lpad()

SQL> select lpad('RedPlus', 10, '@') as "자리채우기" from dual;
SQL> select rpad('RedPlus', 10, '@') as "자리채우기" from dual;

● 공백(특정 문자)제거: trim()

SQL> select trim(' ' from ' red plus ') from dual;

● 절대값: abs()

SQL> select abs(-10) as "절대값" from dual;

● 소수점 자리 버리기(절삭): floor()

SQL> select floor(12.34) from dual;

● 원하는 위치까지 삭제: trunc()

SQL> select trunc(12.3456, 3) from dual;

● 나머지 : mod()

SQL> select mod(3,5) from dual;

● 현재날짜: sysdate

SQL> select sysdate from dual;

● 개월수 구하기 : months_between()

SQL> select ename, months_between(sysdate, hiredate)
       from emp
      where deptno = 10;

● 개월수 더하기: add_months()

SQL> select add_months(sysdate, 4) from dual;

● 다가올 요일에 해당하는 날짜 : next_day(sysdate, '일요일')

SQL> select next_day(sysdate, '일요일') from dual;

● 이번달/특정달의 마지막 일수: last_day()

SQL> select last_day(sysdate) from dual;

● 문자열 변환: to_char()

SQL> select to_char(sysdate, 'yyyy-mm-dd') from dual;

● 날짜형 변환: to_date()

SQL> select to_date('2008-01-01', 'yyyy/mm/dd') from dual;

● null값 처리: nvl()

SQL> select count(comm) from emp;
SQL> select nvl(comm,0) from emp;

● switch 문: decode

SQL> select distinct deptno from emp;
SQL> select ename, decode(deptno, 10, 'Accounting', 20, 'Reasearch', 30, 'Sales') from emp;
SQL> select ename, decode(deptno, 10, 'Accounting', 20, '기타') from emp;

● if~else문: case~when

SQL> select ename, deptno,
    case
     when deptno=10 then 'Account'
     when deptno=20 then 'Research'
     when deptno=30 then 'Sales'
    end as dname
    from emp;

 

 

3. 집계 함수

●합계
SQL> select sum(sal) from emp;

●카운트

SQL> select count(*) from emp;

●평균

SQL> select avg(sal) from emp;

●최대값
SQL> select max(sal) from emp;

●최소값

SQL> select min(sal) from emp;


----------------------------------------------------------------------------
**기본 조건은 where
group의 조건은 having
중복제거의 조건은 distinct

**테이블 복사
employees 테이블을 복사하여 emp라는 테이블을 생성

SQL> create table emp as select * from employees;

 

 

'Oracle' 카테고리의 다른 글

[Oracle] 숫자 소수점 찍기/시청수&조회수 계산  (0) 2020.11.05

+ Recent posts