@I_DC_CD                         VARCHAR(10)

,@I_NOT_FLAG                      CHAR(1)                        = NULL


2개의 값을 받아서  @I_NOT_FLAG  이 변수를 조건에 걸고 싶을때

if ( ISNULL(@I_NOT_FLAG, 'N') = 'N' ) {

M.DC_CD = ISNULL(@I_DC_CD, M.DC_CD)

] else if ( ISNULL(@I_NOT_FLAG, 'N') = 'Y' ) {

M.DC_CD != ISNULL(@I_DC_CD, M.DC_CD)

}


위 내용대로 짜고 싶다면 아래처럼 하면된다


AND (((ISNULL(@I_NOT_FLAG, 'N') = 'N')AND( M.DC_CD = ISNULL(@I_DC_CD, M.DC_CD) ))

OR((ISNULL(@I_NOT_FLAG, 'N') = 'Y')AND( M.DC_CD != ISNULL(@I_DC_CD, M.DC_CD) )))


AND ( ((조건) AND (결과)) or ((조건) AND (결과)) )


복잡해 보이지만 잘 보면 쉬워요^^



'개발 > DB' 카테고리의 다른 글

[MS-SQL] mssql 소수점 연산 방법  (0) 2017.09.11
MSSQL Cursor(커서) 란?  (0) 2017.09.08
[MS SQL] mssql loop 반복문  (0) 2017.09.07
oracle 날짜 포맷  (0) 2017.08.30
MS-SQL 날짜형식 SELECT  (0) 2017.08.29

MSSQL 소수점 계산방법


DECLARE @S_COUNT           AS NUMERIC(18,3)

DECLARE @I_TEST1              AS NUMERIC(18,2)  = 7.00

DECLARE @I_TEST2              AS INT  = 90


SET @S_COUNT = @I_TEST1 * (convert(float,@I_TEST2)/100)

--@I_TEST1 *(@I_TEST2/100)



PRINT @S_COUNT


주석처리한것 처럼 @I_TEST1 *(@I_TEST2/100) 했을경우 (@I_TEST2/100)


계산을 하는 경우 0.000 으로 나옴니다.


담는 변수가 일반 INT가 아니라 NUMBERIC이라 그런듯 합니다.


위에처럼 float으로 처리하던지 아니면


SET @S_COUNT = @I_TEST1 *(convert(decimal(13,3),@I_TEST2)/100)


이렇게 decimal을 사용해서 계산해도 됩니다.


'개발 > DB' 카테고리의 다른 글

ms msql where절 if문 쓰기  (0) 2017.10.30
MSSQL Cursor(커서) 란?  (0) 2017.09.08
[MS SQL] mssql loop 반복문  (0) 2017.09.07
oracle 날짜 포맷  (0) 2017.08.30
MS-SQL 날짜형식 SELECT  (0) 2017.08.29

* MSSQL Cursor(커서) 란?

- 일반적으로 Sql 문 사용 시 결과에 대해서 집합(Table 형태)으로 반환을 합니다.

커서는 이러한 결과 집합을 한 행씩 처리 할 수 있도록 합니다.

 


1. Cursor(커서) 생성 하기


-- Cursor 생성 구문 --


DECLARE test_cursor [ INSENSITIVE ] [ SCROLL ] CURSOR FOR SELECT * FROM temptables

OPEN test_cursor

FETCH NEXT FROM test_cursor


CLOSE test_cursor

DEALLOCATE test_cursor



- 위의 SQL 문을 한줄 씩 살펴 보겠습니다.

+ DECLARE test_cursor CURSOR FOR SELECT * FROM temptables

-> DECLARE 으로 CURSOR 을 선언하는 부분 입니다.

여기서 FOR 구문 뒤에 CURSOR 에 삽입 시켜줄 SELECT 구문을 적용하면 됩니다.


+ OPEN test_cursor

-> 생성된 test_cursor 을 사용하기 위해 OPEN 을 시켜줍니다.

OPEN 은 SELECT 결과 집합을 채우는 역할을 합니다.

* 커서는 사용전에 OPEN 을 해주어야 합니다!


+ FETCH NEXT FROM test_cursor

-> 커서 의 값을 한줄 씩 읽어 옵니다.

FETCH 는 CURSOR 가 가지고 있는 결과 집합에서 행을 반환 합니다.

+ CLOSE test_cursor

-> OPEN 된 커서를 닫아 줍니다.

* 커서와 연결 된 결과 집합을 해제 합니다.


+ DEALLOCATE test_cursor

-> 커서가 제거 됩니다. ( 커서 에서 사용된 리소스를 해제합니다. )



쉽게 말하면,

CURSOR FOR 'QUERY' [커서 생성] -> OPEN [커서 사용준비] -> FETCH [커서 사용]

-> CLOSE [커서 사용해제] -> DEALLOCATE [커서 삭제] 를 해주시면 됩니다.



2. Cursor(커서) 주요 명령문 및 Cursor(커서) 관리 Stored Procedure


-- 커서 명령문 --


- FETCH NEXT

: 현재 행 바로 다음의 결과 행을 반환합니다.

커서에 대해 FETCH NEXT가 첫 번째 인출인 경우에는 결과 집합의 첫 번째 행을 반환합니다.


- FETCH PRIOR

: 현재 행 바로 앞의 결과 행을 반환합니다.

커서에 대해 FETCH PRIOR가 첫 번째 인출인 경우에는 행이 반환되지 않으며 커서는 첫 번째 행 앞에 위치하게 됩니다.


- FETCH FIRST

: 커서의 첫 번째 행을 반환합니다.


- FETCH LAST

: 커서의 마지막 행을 반환합니다.



-- 커서 관리 Stored Procedure --


- sp_cursor_list

: 커서 목록과 그 특성을 반환합니다.


- sp_describe_cursor

: 정방향, 스크롤 커서 등의 커서 특성을 설명합니다.


- sp_describe_cursor_columns

: 결과 집합에서 열의 특성을 설명합니다.


- sp_describe_cursor_tables

: 액세스되는 기본 테이블을 설명합니다.



출처: http://infodbbase.tistory.com/34 [Sharing programming information.]

'개발 > DB' 카테고리의 다른 글

ms msql where절 if문 쓰기  (0) 2017.10.30
[MS-SQL] mssql 소수점 연산 방법  (0) 2017.09.11
[MS SQL] mssql loop 반복문  (0) 2017.09.07
oracle 날짜 포맷  (0) 2017.08.30
MS-SQL 날짜형식 SELECT  (0) 2017.08.29

MSSQL의 프로시저 루프문 사용방법 입니다.


while문을 사용한 반복문 입니다.


DECLARE @cnt int = 5

DECLARE @i int = 0


WHILE(@i < @cnt)

BEGIN

PRINT @i

SET @i = @i + 1

-- 아래는 브레이크 필요하실때 쓰면 됩니다.

IF @i > 2

BREAK

ELSE

CONTINUE

END


예제였습니다.



브레이크가 필요할때는 저런 식으로 분기를 태워서 걸어주시면 됩니다.

간단하죠^^

'개발 > DB' 카테고리의 다른 글

[MS-SQL] mssql 소수점 연산 방법  (0) 2017.09.11
MSSQL Cursor(커서) 란?  (0) 2017.09.08
oracle 날짜 포맷  (0) 2017.08.30
MS-SQL 날짜형식 SELECT  (0) 2017.08.29
오라클 사용자 비밀번호 변경 oracle password change  (0) 2017.08.10

오라클에서 날짜시간 사용하기


1. sysdate

sysdate의 경우 년월일시분초 까지 표시 가능 

예) select sysdate from dual; 

날짜에 포맷을 적용해 문자열로 변환할 때
예)select to_char(sysdate, 'YYYY-MM-DD HH:MI:SS') from dual;

문자열에 포맷을 적용해 날짜로 변환할 때
예)select to_date('2013-09-06','YYYY-MM-DD') from dual;
예)select to_date('2013-09-06 13:15:24','YYYY-MM-DD HH24:MI:SS') from dual;
예)select to_date('20130906132945','YYYYMMDDHH24MISS') from dual;

2. systimestamp

systimestamp의 경우 년월일시분초 밀리세컨드 까지 표시 가능

예) select systimestamp from dual;

날짜에 포맷을 적용해 문자열로 변환할 때
예)select to_char(systimestamp, 'YYYY-MM-DD HH:MI:SSFF') from dual;

문자열에 포맷을 적용해 날짜로 변환할 때
예)select to_timestamp('20130906152837456', 'YYYYMMDDHH24MISSFF') from dual;

FF 가 밀리세컨드를 의미하는데 FF3는 세자리 형식으로 보여주고 FF4는 네자리, FF5는 다섯 자리 형식으로 표기함

날짜를 저장할 때 밀리세컨드까지 저장하려면 컬럼의 데이터 타입은 timestamp로 지정되어야 함

출처 : http://egloos.zum.com/uknowapps/v/1813668


'개발 > DB' 카테고리의 다른 글

MSSQL Cursor(커서) 란?  (0) 2017.09.08
[MS SQL] mssql loop 반복문  (0) 2017.09.07
MS-SQL 날짜형식 SELECT  (0) 2017.08.29
오라클 사용자 비밀번호 변경 oracle password change  (0) 2017.08.10
서브쿼리 (subquery)  (0) 2017.08.01

MS-SQL 날짜형식 SELECT


select convert(varchar, getdate(), 100)  --mon dd yyyy hh:miAM (or PM)

select convert(varchar, getdate(), 101)  --mm/dd/yyyy

select convert(varchar, getdate(), 102)  --yyyy.mm.dd

select convert(varchar, getdate(), 103)  --dd/mm/yyyy

select convert(varchar, getdate(), 104)  --dd.mm.yyyy

select convert(varchar, getdate(), 105)  --dd-mm-yyyy

select convert(varchar, getdate(), 106)  --dd mon yyyy

select convert(varchar, getdate(), 107)  --Mon dd, yyyy

select convert(varchar, getdate(), 108)  --hh:mm:ss

select convert(varchar, getdate(), 109)  --mon dd yyyy hh:mi:ss:mmmAM (or PM)

select convert(varchar, getdate(), 110)  --mm-dd-yyyy

select convert(varchar, getdate(), 111)  --yyyy/mm/dd

select convert(varchar, getdate(), 112)  --yyyymmdd

select convert(varchar, getdate(), 113)  --mon yyyy hh:mi:ss:mmm (24h)

select convert(varchar, getdate(), 114)  --hh:mi:ss:mmm (24h)

select convert(varchar, getdate(), 120)  --yyyy-mm-dd hh:mi:ss (24h)

select convert(varchar, getdate(), 121)  --yyyy-mm-dd hh:mi:ss.mmm (24h)

select convert(varchar, getdate(), 126)  --yyyy-mm-ddThh:mi:ss.mmm

select convert(varchar, getdate(), 130)  --dd mon yyyy hh:mi:ss:mmmAM

select convert(varchar, getdate(), 131)  --dd/mm/yyyy hh:mi:ss:mmmAM



출처: http://gent.tistory.com/35 [젠트의 프로그래밍 세상]

'개발 > DB' 카테고리의 다른 글

[MS SQL] mssql loop 반복문  (0) 2017.09.07
oracle 날짜 포맷  (0) 2017.08.30
오라클 사용자 비밀번호 변경 oracle password change  (0) 2017.08.10
서브쿼리 (subquery)  (0) 2017.08.01
Outer Join 정리  (0) 2017.07.31

DB 접속 (윈도우 서버일 경우 콘솔에서)

sqlplus '/as sysdba'


사용자 검색


SQL> show user


SQL> alter user [user id] identified by [password];


user id  자리에 변경하고자 하는 사용자 계정을 넣고 password자리에 변경하고자 하는 패스워드를 넣어주세요.



간단한 user 비밀번호 변경이였습니다.



'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'개발 > DB' 카테고리의 다른 글

oracle 날짜 포맷  (0) 2017.08.30
MS-SQL 날짜형식 SELECT  (0) 2017.08.29
서브쿼리 (subquery)  (0) 2017.08.01
Outer Join 정리  (0) 2017.07.31
[시간별 통계] 한개의 테이블에서 여러개 count값 뽑기  (0) 2017.03.17

서브쿼리(Subquery)란 하나의 SQL문안에 포함되어 있는 또 다른 SQL문을 말한다. 서브쿼리는 알려지지 않은 기준을 이용한 검색을 위해 사용한다. 서브쿼리는 메인쿼리가 서브쿼리를 포함하는 종속적인 관계이다.

  • 서브쿼리 사용시 주의사항
    • 서브쿼리를 괄호로 감싸서 사용한다.
    • 서브쿼리는 단일 행(Single Row) 또는 복수 행(Multiple Row) 비교 연산자와 함께 사용 가능하다. 단일 행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하이어야 하고 복수 행 비교 연산자는 서브쿼리의 결과 건수와 상관 없다.
    • 서브쿼리에서는 ORDER BY를 사용하지 못한다. ORDER BY절은 SELECT절에서 오직 한 개만 올 수 있기 때문에 ORDER BY절은 메인쿼리의 마지막 문장에 위치해야 한다.
  • 서브쿼리가 가능한 곳은 다음과 같다.
    • SELECT CLAUSE
    • FROM CLAUSE
    • WHERE CLAUSE
    • HAVING CLAUSE
    • ORDER BY CLAUSE
    • INSERT VALUES CLAUSE
    • UPDATE SET CLAUSE


① 단일행 서브쿼리(Single Row Subquery)
SELECT * 
FROM Player
WHERE Team_ID = (
	SELECT Team_ID 
	FROM Player
	WHERE Player_name = "yonglae"
	)
ORDER BY Team_name;

② 다중행 서브쿼리(Multiple Row Subquery)
SELECT * 
FROM Team
WHERE Team_ID IN (
	SELECT Team_ID 
	FROM Player
	WHERE Player_name = "yonglae"
	)
ORDER BY Team_name;

③ 다중컬럼 서브쿼리(Multi Column Subquery)
SELECT * 
FROM Player
WHERE (Team_ID, Height) IN (
	SELECT Team_ID, MIN(Height) 
	FROM Player
	GROUP BY Team_ID
	)
ORDER BY Team_ID, Player_name;



Outer Join 이란?


- Equi Join은 조인을 생성하려는 두 개의 테이블의 한쪽 컬럼에서 값이 없다면 테이터를 반환하지 못한다.

- 동일 조건에서 조인 조건을 만족하는 값이 없는 행들을 조회하기 위해 Outer Join을 사용 한다.

- Outer Join 연산자는 "(+)" 이다.

- 조인시 값이 없는 조인측에 "(+)"를 위치 시킨다.

- Outer Join 연산자는 표현식의 한 편에만 올 수 있다.



LEFT OUTER JOIN


LEFT OUTERL JOIN은 오른쪽 테이블(아래 예제에서 emp테이블)에 조인시킬 컬럼의 값이 없는 경우 사용한다.


SELECT DISTINCT(e.deptno), d.deptno

FROM dept d 

LEFT OUTER JOIN emp e

ON d.deptno = e.deptno; 



RIGHT OUTER JOIN


RIGHT OUTERL JOIN은 왼쪽 테이블(아래 예제에서 emp테이블)에 조인시킬 컬럼의 값이 없는 경우 사용한다.


SELECT DISTINCT(e.deptno), d.deptno

FROM emp e 

RIGHT OUTER JOIN dept d

ON e.deptno = d.deptno;



FULL OUTER JOIN


FULL OUTERL JOIN은 양쪽 테이블 모두 Outer Join걸어야 하는 경우 사용 한다.


SELECT DISTINCT(e.deptno), d.deptno

FROM emp e 

FULL OUTER JOIN dept d

ON e.deptno = d.deptno;



출처  :  http://www.gurubee.net/lecture/1021

SELECT date_format(on_time, '%Y.%m.%d %k시') as 상세보기,

COUNT(if(block= 'Y', 1, null)) as 지정IP,

COUNT(if(block = 'N', 1, null)) as 차단IP,

COUNT(if(block = 'A', 1, null)) as 미지정IP

from user_log

group by 상세보기

order by 상세보기;

'개발 > DB' 카테고리의 다른 글

MS-SQL 날짜형식 SELECT  (0) 2017.08.29
오라클 사용자 비밀번호 변경 oracle password change  (0) 2017.08.10
서브쿼리 (subquery)  (0) 2017.08.01
Outer Join 정리  (0) 2017.07.31
[ MYSQL ] Access denied for user ~ (using password: YES)  (0) 2017.03.17

+ Recent posts