반응형

개발 창고/Database 56

[MSSQL] Multi rows into one column

WITH TEMP AS ( SELECT '과일' AS CLASS , '사과' AS NAME UNION ALL SELECT '과일' AS CLASS , '배' AS NAME UNION ALL SELECT '과일' AS CLASS , '포도' AS NAME UNION ALL SELECT '과일' AS CLASS , '귤' AS NAME UNION ALL SELECT '과자' AS CLASS , '홈런볼' AS NAME UNION ALL SELECT '과자' AS CLASS , '치토스' AS NAME UNION ALL SELECT '과자' AS CLASS , '양파링' AS NAME UNION ALL SELECT '과자' AS CLASS , '꼬북칩' AS NAME UNION ALL SELECT '음료' A..

[ORACLE] ORA-12505

※ 전문가로서 접근보다는 경험 기준으로 작성된 내용입니다. 이 버전에서는 TOC를 지원하지 않습니다. (ex. 모바일) 에러발생 원인 지정 TNS 리스너가 올바르지 않은 경우 발생 지금까지 발생한 이유 Oracle TNS 서비스가 꺼진 경우 TNS Listener명이 변경되어 지정된 TNS Listener가 더 이상 접근되지 않는 경우 그 외에 내용이더라도 아래의 방법을 체크해보아야 합니다. 점검/해결 방법 #1 점검) Oracle Service 상태가 "실행 중" 인지 체크 해결) 서비스 "시작" 또는 "다시 시작" 점검/해결 방법 #2 점검) Oracle Listener Service 실행 확인 cmd - lsnrctl service 설정된 서비스 인스턴스가 실행되지 않은 경우 해결) Listener..

[MSSQL] 문자열 나누기 - SPLIT

/** * SPLIT 함수 생성 * ex. SELECT TXT, SORT FROM DBO.FN_STR_SPLIT('TEST1;TEST2;TEST3', ';') */ CREATE FUNCTION [dbo].[FN_STR_SPLIT] ( @INSTR VARCHAR(MAX) = NULL -- 입력내용 , @KEY CHAR(1) = ';' -- 구분자 ) RETURNS @ARRAY TABLE (TXT VARCHAR(1000), SORT INT) AS BEGIN DECLARE @CSTR VARCHAR(MAX) -- 남은 아이템 텍스트 DECLARE @NSTR VARCHAR(MAX) -- 현재 아이템 텍스트 DECLARE @SORT INT -- 정렬 순번 -- STEP. 초기화 SET @CSTR = @INSTR S..

[SQL] 연산자

연산자의 종류 크게 연산자에는 5가지의 연산자가 존재합니다. 구분 연산자 연산자의 의미 비교 연산자 = ex. A = B A와 B가 같으면 True, 다르면 False > ex. A > B A가 B보다 크면 True, 작거나 같으면 False >= ex. A >= B A가 B보다 크거나 같으면 True, 작으면 False 100 NOT IN (list) ex. A IN (B, C, D, E) A가 B, C, D, E 중 하나인 경우 False, B, C, D, E 중에 없으면 True A != B AND A != C AND A != D AND A != E IS NOT NULL ex. A IS NULL A가 NULL인 경우 False, A가 NULL이 아닌 경우(공란 포함) True 연산자의 우선순위 우선..

[MSSQL] 시간/날짜 간격 구하기 DATEDIFF

SQL문을 사용하다 보면, 아래와 같은 상황에 직면하곤 합니다. ex) 1. 일주일 전 날씨 정보를 알려주세요. 2. 한 달 전과 오늘의 온도 차를 알려주세요. 3. 1시간 전 매출과 현재 매출을 비교해 주세요. 이 세 가지 예시의 동일한 점은 "OO 전"이라는 점입니다. 이는 시간을 가지고 비교하겠다는 거고, 일단 WHERE에서 일자를 조정할 수 있겠으나 현재 예시를 위해서는 SELECT절에서 처리해 보도록 하겠습니다. 사용방법 SELECT DATEDIFF('구분자', '시작일자', '종료일자') 구분 구분자 약어 년 year yy, yyyy 분기 quarter qq, q 월 month mm, m 일 day dd, d 주 week wk 시간 hour hh, h 분 minute mi, n 초 second..

[MySQL] SUBSTRING_INDEX를 이용한 SPLIT하기

데이터베이스로 데이터를 추출하다 보면 substirng이나 left, right 이외에도 split를 활용하여 중간의 데이터만 추출해야 하는 경우가 종종 발생하곤 합니다. ex. 전화번호의 중간 번호 추출하기 010-1234-5678 ===> 1234 ex. 주소에서 시/군/구를 추출해야하는 겨우 경기도 성남시 분당구 ===> 성남시 이 경우 substirng_index를 변형하여 사용하면 쉽게 추출할 수 있습니다. 그러면 substring_index는 무엇일까요? SUBSTRING_INDEX(문자열, 구분자, 구분자index) 주어진 "문자열(문자의 나열)" 중에서 "구분자" 기준으로 "구분자의 index" 만큼 추출하여 보여주는 것을 말합니다. 만약 위의 전화번호를 가족 예를 들어, 만약 아래와 같은..

[MSSQL] Procedure / Function 조회

Procedure나 Function을 만들어 운영하다 특정 테이블이나 컬럼, 값 등을 변경해야 하는 경우에 조회를 하거나, 명칭 등을 조회해야 하는 경우가 존재합니다. 그런 경우 INFORMATION_SCHEMA.ROUTINES를 활용하여 조회 가능합니다. SELECT ROUTINE_NAME AS "프로시저/함수 명" , ROUTINE_DEFINITION AS "프로시저/함수 내용" , CREATED AS "생성일시" , LAST_ALTERED AS "수정일시" FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' 위 Query를 실행 하면 아래와 같은 결과 화면을 호출받을 수 있습니다. 해당 결과를 통해서 생성 이후 변경된 Query나 개..

[MSSQL] 특정 문자열의 개수 추출

Query를 작성하다 보면 해당 칼럼에서 특정 문자열의 개수를 추출하는 경우가 발생합니다. 이는 그 문자열의 개수가 중요하다기보다, 해당 문자열의 개수를 가지고 해당 칼럼에 등록된 항목의 수가 몇 개인지 확인할 때 주로 사용됩니다. LEN(원문) : 원문의 글자 수 반환 REPLCAE(원문, 대상문자, 변경 문자) : 원문에서 대상 문자를 찾아 변경 문자로 바꿔줌 SELECT V.TEXT원문 , LEN(V.TEXT)"문자열 개수" , LEN(V.TEXT) - LEN(REPLACE(V.TEXT, '/', ''))"슬래시(/) 문자열 개수" , LEN(V.TEXT) - LEN(REPLACE(V.TEXT, '/', '')) + 1"항목 수" FROM ( SELECT '바나나/사과/배/딸기' AS TEXT UN..

[MSSQL] 특정 위치 문자열 추출

Query를 작성하다 보면, 특정 컬럽의 값 중에서 특정 위치의 단어만을 추출해야 하는 경우가 발생하곤 합니다. 그럴 때는 아래처럼, CHARINDEX와 SUBSTRING을 적절히 활용하여 추출 가능합니다. CHARINDEX("찾는 문자", "원문"[, "시작 위치"]) : 원문에서 찾는 문자의 위치 INDEX를 반환 SUBSTRING("원문", "시작 위치", "종료 위치") : 원문의 시작 위치에서 종료 위치까지만 반환 LEN("원문") : 원문의 글자 수 반환 SELECT V.TEXT원문 , CHARINDEX('/', V.TEXT)"첫 번째 슬래시 위치" , SUBSTRING(V.TEXT, 0, CHARINDEX('/', V.TEXT))"첫 번째 단어" , CHARINDEX('/', V.TEXT, ..

[MSSQL] 여러 행 값을 한 컬럼에 넣기

데이터 집계를 하다 보면 여러 값을 한 개의 컬럼에 넣어야 하는 경우가 발생합니다. ex #1. 2022년에 각 팀별 평가 평균과 해당 팀원 목록을 한 줄로 보여주세요. ex #2. 택배 송장에 붙일 전체 주문 금액과 해당 상품 목록을 한 줄로 보여주세요. ex #3. 현재 공장에서 생산 중인 제품 목록을 한 줄로 보여주세요. 여기에 동일한 내용은 데이터를 취합해서 한 줄로 보여 줘야 하는 경우입니다. 우선 예시에 앞서 아래의 데이터를 추가해줍니다. CREATE TABLE STUDENT ( SEQDECIMAL(18,0), CLASSVARCHAR(10), NAMEVARCHAR(10) ) INSERT INTO STUDENT (SEQ, CLASS, NAME) VALUES (1, '1반', '호두') INSER..

반응형