본문 바로가기

Database

[MSSQL] 임시 테이블 존재 확인 및 삭제 쿼리 실행 시 임시테이블(#TempTb)이 이미 존재한다는 예외가 발생할 때 사용 IF OBJECT_ID ('tempdb..#TempTb') IS NOT NULL BEGIN DROP TABLE #TempTb END
[MSSQL] Lock 처리 쿼리 사용 중 오류가 발생하면서 Lock 이 발생하는 경우 발생하며 해당 프로세스가 종료 되지 않으면 해당 테이블 사용이 불가능한 상태가 발생하므로 해당 프로세스 종료가 필요함 Lock 내용 확인 하기 명령어를 실행 Mode가 X 인 것들을 확인하고, spid 기억 EXEC SP_LOCK; 입력 된 spid 관련 명령어를 확인 가능 DBCC INPUTBUFFER(spid); ex) DBCC INPUTBUFFER(96); 명령어 관련 정보 출력 EXEC SP_WHO spid ex) EXEC SP_WHO 96 해당 프로세스 종료 KILL spid; ex) KILL 96;
[MSSQL] 특정 일자 요일 구하기 MSSQL 에서 요일을 구하기 위해서는 DATENAME 또는 DATEPART 함수를 사용 요일 표시 (SQL Server의 언어 설정에 따라서 표시 문구가 변경) 한국어 : '월요일', '화요일'... 영어 : 'Monday', 'Tuesday'... SELECT DATENAME(WEEKDAY, GETDATE()) 요일 숫자 표시 기본은 일요일을 시작으로 순서대로 1(일), 2(월)... SELECT DATEPART(WEEKDAY, GETDATE()) 주차 시작 기준을 일요일에서 월요일로 변경 SET DATEFIRST 1 요일을 원하는 문자로 변경 SET DATEFIRST 1 SELECT CASE WHEN(DATEPART(WEEKDAY, GETDATE()) = '1') THEN '(월)' WHEN(DAT..
[Database] DB 변경 시 확인해야 할 함수 MySql Oracle MSSql 현재시간 NOW() SYSDATE GETDATE() 날짜 형식 DATE_FORMAT TO_CHAR CONVERT 날짜 형 변환 STR_TO_DATE TO_DATE CONVERT 날짜 더하기 뺴기 DATE_ADD INTERVAL DATEADD 하나 Row 가져오기 limit 0,1 ROWNUM=1 Top 1 Null 확인 IFNULL NVL ISNULL ※ 날짜 변환 (Data > String) DATE_FORMAT(CURRENT_TIMESTAMP, '%Y-%m-%d %H:%i') -- MYSql TO_CHAR(REG_DT, 'YYYY-MM-DD') -- Oracle CONVERT(CHAR(10), CURRENT_TIMESTAMP, 23) -- MSSql ※ 날짜 변환(S..
[Oracle] 날짜 관련 정보 구하기 1. 해당일의 주차 SELECT TO_CHAR(SYSDATE, 'IW') FROM DUAL 2. 이번달 첫주 날 수 SELECT TO_NUMBER(TO_CHAR(NEXT_DAY((TRUNC(SYSDATE, 'MM') - 1), 1), 'DD')) FROM DUAL 3. 이번달 마지막주 날 수 SELECT LAST_DAY(SYSDATE) - NEXT_DAY((LAST_DAY(SYSDATE) - 7), 2) + 1 FROM DUAL 4. 이번달 첫날 SELECT TO_CHAR(TRUNC(SYSDATE, 'MM'), 'YYYYMMDD') FROM DUAL 5. 이번달 마지막 날 SELECT LAST_DAY(SYSDATE) FROM DUAL 6. 전달 마지막 날 SELECT TO_CHAR(TRUNC(SYSDAT..
[MySQL] COUNT 함수 테이블의 Row 갯수를 구할때 사용SELECT COUNT(*)FROM TABLE_NAME ※ 특정 항목별 갯수 SELECT COUNT(CASE WHEN P.ORDER_STEP = 1 THEN 1 END) AS cntStep1, COUNT(CASE WHEN P.ORDER_STEP = 2 THEN 1 END) AS cntStep2, COUNT(CASE WHEN P.ORDER_STEP = 3 THEN 1 END) AS cntStep3FROM TABLE_NAME
[MySQL](Error) Error 1093 : You can't specify target table 'TABLE_NAME' for update in FROM clause MySQL의 경우 Oracle과 달리 UPDATE 나 DELETE시 자기 테이블의 데이터를 바로 사용 못해서 SQL실행 시 1093에러가 발생함 UPDATE TBL_TRD_PROD_INFO SET REC_TIME = CURRENT_TIME(), REC_ID = '1111' WHERE PROD_TRD_ID IN (SELECT PROD_TRD_ID FROM TBL_TRD_PROD_INFO WHERE ORDER_STEP != 0 AND ORDER_STEP = 2-1) - Sub Query를 하나 더 넣어서 임시 테이블을 만들어서 해결 UPDATE TBL_TRD_PROD_INFO SET REC_TIME = CURRENT_TIME(), REC_ID = '1111' WHERE PROD_TRD_ID IN (SELEC..
[MySQL] ROW_NUMBER Oracle에서 제공하는 ROW_NUMBER함수를 MySQL에서는 사용할 수 없어서 직접 구현해야 한다. ※ 번호SELECT @rownum:=@rownum+1 AS ROW_NUMBERFORM TABLE_NAME,(SELECT @rownum := 0) T - TABLE_NAME : 사용하는 테이블명- (SELECT @rownum := 0) : rownum 초기화- @rownum:=@rownum+1 : 증감 ※ 그룹별 번호 ORACLE은 하기와 같이 가능한 기능을 구현해야 한다. SELECT ROW_NUMBER() OVER(PARTITION BY COL_NAME1 ORDER BY COL_NAME2) AS RNUMFROm TABLE_NAME SELECT (CASE @vData WHEN COL_NAME1 THE..