IT_DBMS/MSSQL

Select 연습 2(수치 연산 함수, 문자열 함수...)

JJun ™ 2006. 3. 6. 22:47


테이블 생성...반드시 실행 후 아래 예제 볼것...

 

/** 수치 연산 함수 **/
 
-- CEILING 무조건 올림...
SELECT CEILING(29.1), CEILING(29.9), CEILING(0.9), CEILING(0.1)

SELECT SANAME, CEILING(SAPAY*1.2356781), SAPAY*1.2356781
FROM SAWON

 

-- ROUND  반올림
SELECT ROUND(123456.34567, 2), ROUND(123456.34567, 0), ROUND(123456.34567, -2)
-- 결과 123456.35000 123456.00000 123500.00000

 

SELECT ROUND(49.0, -1), ROUND(49.0, -2), ROUND(50.0, -2)
-- 결과 50.0 .0 100.0

 

-- FLOOR 무조건 내림..
SELECT  FLOOR(0.1), FLOOR(0.5), FLOOR(0.9),
 FLOOR(1.0), FLOOR(1.1), FLOOR(1.9),
 FLOOR(29.1)
-- 결과  0    0    0    1    1    1    29


/** 문자열 함수 **/

SELECT 10 + 10  -- 20... 산술 연산자
SELECT '10' + '10' -- 1010.. 연결 연산자
SELECT '10' + 10  -- 20... 문자열이 자동 형변환으로 산술 연산자가 됨.


-- 다음과 같이 출력하라....
-- 사번 1 엄정화님은 직위가 사원이시고 성별은 여자입니다.
-- 사번 2 룰라님은 직위가 대리이시고 성별은 여자입니다.

SELECT '사번 ' + CONVERT(VARCHAR(3), SABUN) +  SPACE(1) + SANAME + '님은 직위가 ' + SAJOB + '이시고 성별은 ' + SASEX + '자입니다.'
FROM SAWON;


-- ASCII...아스키 코드값 반환...
SELECT ASCII('A')  -- 65 반환

 

-- CHAR...아스키 코드를 문자로 변환
SELECT CHAR(65) -- A

 

-- CHARINDEX...지정한 식의 시작 위치 값 반환
SELECT CHARINDEX('-', '12345-12345') 
-- 6 반환
SELECT CHARINDEX('2', '12345-12345', 3) -- 8 반환..2는 2번째와 8번째 두군데지만 시작이 3번째 위치부터이므로 8 반환..

 

-- LEFT, RIGHT, SUBSTRING
SELECT LEFT('ABCDEFG', 4), RIGHT('ABCDEFG', 3), SUBSTRING('ABCDEFG', 3, 3)
-- 결과  ABCD EFG CDE

 


-- 다음을 출력하라
/*
고객이름  전화(국번)
**************************
엄정화  5123
김미화  223 
*/
SELECT GONAME '고객이름', LEFT(GOTEL, CHARINDEX('-',GOTEL)-1) '전화번호(국번)'
FROM GOGEK

 


-- 다음을 출력하라..
/*
이름 주소(구)
******************
엄정화 관악구
룰라  영등포구
*/

SELECT  SANAME '이름',
              SUBSTRING( SAADDR,
                                   CHARINDEX(' ', SAADDR)+1,  
-- SUBSTRING 할 시작점...첫번째 ' ' 위치 +1 
                                   CHARINDEX(' ', SAADDR, CHARINDEX(' ', SAADDR)+1) - CHARINDEX(' ', SAADDR)
                                  
-- SUBSRING으로 자를 자리수....두번째 ' ' 위치에서 첫번째 ' ' 위치빼면 중간 문자열 길이 나온다..
  ) '주소(구)'
FROM  SAWON;

 

/* OR */

 

SELECT SANAME '이름',
             LEFT( 
                          SUBSTRING(SAADDR, CHARINDEX(' ', SAADDR)+1, 10),
                         
-- 첫번째 공백문자 + 1 위치에서 뒤로 10문자 가져온다...영등포구 XXXXX
                          CHARINDEX(' ', SUBSTRING(SAADDR, CHARINDEX(' ', SAADDR) +1, 10)) - 1
  
-- 영등포구 XXXXX 에서 첫번째 ' ' 위치를 구해서 1을 빼면 중간 문자열 길이값이다..
 )  '주소(구)'
 
-- 영등포구 XXXXX 에서 CHARINDEX에서 ' ' 구한 위치 값..즉 중간 문자열 길이만큼 자른다...
FROM SAWON;

 


-- REPLACE
SELECT REPLACE('ABCDEF', 'ABC', '123'); -- 결과 123DEF

 

-- 고객 테이블에서 다음을 출력하라..
/*
이름 생년월일  성별
****************************
이주일 45년 11월 13일 남자
*/

SELECT  GONAME '이름', 
              SUBSTRING(GOJUMIN, 1, 2) + '년 ' + SUBSTRING(GOJUMIN, 3, 2) + '월 ' + SUBSTRING(GOJUMIN, 5, 2) + '일' AS '생년월일',
              REPLACE(REPLACE(SUBSTRING(GOJUMIN, 8, 1), '1', '남자'), '2', '여자') '성별'
FROM GOGEK;

 

SELECT * FROM GOGEK;