반응형 Database59 Oracle 오라클 두 좌표 사이의 거리 구하기 WGS84 Oracle 오라클 두 좌표 사이의 거리 구하기 WGS84 특정 테이블에 좌표값 컬럼이 있고(LOCATION_DATA_Y, LOCATION_DATA_X) 파라메터로 좌표값(Y : 33.504274, X : 126.529182)을 받아 거리를 구하고자 할 경우 2km 정도의 오차 발생의 경우(0.019 - 0.022) [QUERY] SELECT DISTANCE_WGS84(33.504274, 126.529182, LOCATION_DATA_Y, LOCATION_DATA_X) as DISTANCE FROM COL_INCIDENT_LOG WHERE (LOCATION_DATA_Y BETWEEN 33.504274-0.019 AND 33.504274+0.019) AND (LOCATION_DATA_X BETWEEN 12.. Database/SQL 2017. 11. 7. 오라클 WM_CONCAT 하나의 컬럼으로 가져오기, 중복제거 ORACLE 오라클 WM_CONCAT 하나의 컬럼으로 가져오기, 중복제거 개발을 하다보면 여러 ROW 의 데이터를 하나의 행으로 가져와야 할 때가 있습니다. 이럴 떄 사용하는 것이 WM_CONCAT 함수입니다. 예를 들어 아래와 같은 데이터가 있다고 하죠. SELECT * FROM COL_DRIVING_LOG_INFO 여기서 USER_ID 별로 DRIVING_END_TIME 을 하나의 행으로 가져오고 싶다고 합시다. 그럼 아래와 같이 WM_CONCAT을 사용하면 됩니다. SELECT USER_ID , WM_CONCAT(DRIVING_END_TIME) FROM COL_DRIVING_LOG_INFO GROUP BY USER_ID 그럼 아래와 같은 결과를 가져오게 되죠. 근데 중복값이 있네요? 중복제거는 DI.. Database/SQL 2017. 10. 25. ORA-28001 , ORA-28002 비밀번호 만기관련 오라클 해결방법. 오라클 해결방법ORA-28001 , ORA-28002 비밀번호 만기관련 오라클 해결방법. 갑자기 잘 사용하고 있던 프로그램이 디비 접속이 되지않아 로그를 확인해 보니, 아래와 같은 오라클 에러가 나고 있었습니다. 내용을 확인해보니 오라클 11부터 패스워드에 대한 유효기간이 설정 된다는 것이더군요. 기본은 180일(6달, 반년) 으로 설정되고, 중간중간에 몇일 남았다는 문구가 표출된다던데, 하두 신경을 안쓴지라 보지는 못했습니다. 그럼 해결 방법을 알아보도록 하죠. 제일 간단한 방법은 비밀번호 설정을 다시 해주시면 됩니다. alter user 유저명 identified by 패스워드; 하지만 이것은 미봉책이죠. 180 이후에 또 같은 문제가 발생할 것입니다. 관리자로 로그인 하여 해당 패스워드에 대한 유효.. Database/SQL 2017. 6. 14. MYSQL, MariaDB 한글 검색 안될때 케릭터셋 설정방법, 변경방법 MYSQL, MariaDB 한글 검색 안될때 케릭터셋 설정방법 환경 : window, MariaDB 10.1 수정할 일이 있어 기존에 실에서 사용하던 디비를 가져와 테스트 디비를 새로 생성했는데 실에서 잘 되던 한글 검색이 잘 되지 않았다. 원인은 테스트 디비의 케릭터셋 설정 문제. 디비의 케릭터 셋을 확인한다. show variables like 'char%'; 역시나 character_set_server 가 latin1 으로 설정 되어 있었다. 개발 소스에서는 utf-8 인코딩을 해 보내는데 디비에서는 latin1으로 받으니 한글이 제대로 넘어가지 않은 것이다. [해결방법] MariaDB가 설치된 폴더의 data폴더로 이동한다. (보통 C:\Program Files\MariaDB 10.1\data) .. Database/기초 2017. 2. 20. 엑셀 Excel ODBC 연동시 case when 방법 엑셀 Excel ODBC 연동시 case when 방법 switch 엑셀 ODBC에선 case when 함수를 제공 하지 않는다. 같은 기능을 하는 함수로는 switch문이 있다. 문법은 아래와 같다. Switch ( expression1, value1, expression2, value2, ... expression_n, value_n ) Ex) switch(컬럼1=90, '수', 컬럼1=80, '우'....) 컬럼1값이 90이면 수를 컬럼1값이 80이면 우를.... 찾는게 어려운거지.. 알면 쉽다. Database/SQL 2016. 9. 9. 엑셀 Excel ODBC 연동시 nvl isnull, ifnull 방법. 엑셀 Excel ODBC 연동시 nvl isnull, ifnull 방법. 아 nvl 함수가 없는줄 알고 한참을 해매다가 구글링 해서 찾았네요. ODBC를 활용해 엑셀을 디비로 활용하는데, 오라클의 nvl이나 mysql isnull 과 같은 함수를 못찾아서 해맷는데 오늘에서야 해결! 결론은 엑셀함수 형식과 같이 사용하면 됩니다. Ex) SELECT 컬럼 FROM 테이블 WHERE 컬럼 LIKE 조건 위와같이 SQL문을 사용하면 컬럼이 NULL일 경우 조건에 '%'를 넘겨도 조회가 되지 않습니다. 값이 있는 데이터만 조회가되죠. 그래서 오라클의 NVL과 같은 함수를 사용해야 하는데 아래와 같이 쿼리문을 작성하면 됩니다. SELECT IIF(ISNULL(컬럼), '', 컬럼) AS 컬럼 FROM 테이블 WHE.. Database/SQL 2016. 9. 9. MySQL ROW_NUMBER ORDER BY 정렬한 후 번호 매기기 MySQL ROW_NUMBER ORDER BY 정렬한 후 번호 매기기 아..오라클은 ROW_NUMBER() OVER (PARTITION BY ...ORDER BY) 로 정렬한 후 번호 매기기가 매우 쉽다. 하지만 우리의 MySql 은 그러한 함수가 없다. 그렇지만 MySql은 쿼리문에서 변수를 사용할 수 있는 막강한 기능이 있다. 변수를 이용하여 order by 한 쿼리에 rownumber 를 구하는 방법에 대해 알아보자. 우선 감을 잡기 위해 제일 기본이 되는 쿼리문 부터 보겠다. 기본 SELECT 문이다. SELECT T1.GG4ID AS GG4ID , T1 .BASIC_DAY AS DAY , T1 .BASIC_HOUR AS HOUR , T1 .BASIC_MIN AS MIN , T1 .VOLUME A.. Database/SQL 2016. 4. 27. ODBC 엑셀 연동 시 INSERT INTO 문의 구문 오류입니다. 에러 ODBC 엑셀 연동 시 INSERT INTO 문의 구문 오류입니다. 에러 쿼리문에 아무 이상도 없는데 개발 중 발생 한 에러. 위의 쿼리를 보면 그냥 진짜 간단한 Insert into 문이다. 근데 에러가 발생했다. java.sql.SQLException: [Microsoft][ODBC Excel 드라이버] INSERT INTO 문의 구문 오류입니다. 원인은 간단했다..예약어를 사용했기 떄문.. 위워 sql문에서 INSERT할 컬럼을 보면 day, time 등 예약어명과 같은 컬럼이 있다. Oracle이나 Mysql, Mssql 사용시에는 발생 안했던 에러 같은데..ODBC는 이를 에러로 던진다.. 해결방법은 간단히 예약어의 컬럼명을 바꿔주면 된다. resDay, resTime 과 같이. 예약어 사용을 .. Database/SQL 2016. 4. 20. MariaDB 마리아디비 다운로드 설치 및 이클립스 프로젝트 연동 MariaDB 마리아디비 다운로드 설치 및 이클립스 프로젝트 연동 Mysql이 Oracle 로 넘어가면서 유료화가 되어가고 있고... 무료 DB를 찾던 도중 발결한 MariaDB.. Mysql에 있던 분이 나와서 만든거라고 알고있습니다. 사용방법 sql 문이 거의 99% 일치하다고 하죠.. 다운 방법을 보겠습니다. 아래의 Link 로 이동합니다. Link : https://mariadb.org/ 페이지가 연결되면 상단의 Download를 클릭합니다. 아래쪽에 Download를 클릭합니다. 오른에 원하는 버젼의 Download를 선택합니다. 전 최신버전인 10.1 버전 선택! Download 10.1.13 stable Now! 버튼 클릭! 다운로드 페이지로 연결되면 자신의 OS 비트에 맞는 것을 다운로드 .. Database/SQL 2016. 4. 19. Mysql 자음 초성 추출 함수, 자음으로 검색, 초성 검색 Mysql 자음 초성 추출 함수, 자음으로 검색, 초성 검색 개발을 하다보면 자음으로만 검색할 수 있게 해달라는 요청이 들어오곤 한다. 그럴때마다 유용하게 사용하는 것이 아래의 함수이다. 그냥 복사 붙여넣고 실행하면 함수가 생성된다. (해당 데이터베이스 명만 수정 : 아래는 gn) CREATE DEFINER=`스키마`@`%` FUNCTION `fn_choSearch`(`str` varchar(20)) RETURNS varchar(20) CHARSET utf8 BEGIN declare returnStr varchar(100); declare cnt int; declare i int; declare j int; declare tmpStr varchar(10); if str is null then return.. Database/SQL 2016. 4. 18. Oracle 오라클 자음 초성 추출 함수, 자음으로 검색, 초성 검색 Oracle 오라클 자음 초성 추출 함수, 자음으로 검색, 초성 검색 개발을 하다보면 자음으로만 검색할 수 있게 해달라는 요청이 들어오곤 한다. 그럴때마다 유용하게 사용하는 것이 아래의 함수이다. 그냥 복사 붙여넣고 실행하면 함수가 생성된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 create or replace function fn_choSearch( str in varchar2) return varchar2 is returnStr varchar2(100); cnt number := 0; tmpStr varchar2(10); begin if str is null th.. Database/SQL 2016. 4. 18. 오라클 부분 조회, 페이징 처리, ROW_NUMBER(), ROWNUM, 원하는 행 조회 오라클 부분 조회, 페이징 처리, ROW_NUMBER(), ROWNUM, 원하는 행 조회 오라클 쿼리로 페이징 처리를 하려할 때 생각나는 방법은 ROWNUM과 BETWEEN을 사용하면 될 것 같다는 생각을 했다. SELECT ROWNUM , T.* FROM 테이블명 T WHERE ROWNUM BETWEEN 1 AND 5; 뭐 이런식으로 하면 될 것 같았다. 하지만, ROWNUM의 사이값이 1이 아니면 출력되지 않았다. SELECT ROWNUM , T.* FROM 테이블명 T WHERE ROWNUM BETWEEN 6 AND 10 ; -출력안됨(오류는 아님) 이를 출력하기 위해서는 해당 SELECT문을 서브쿼리로 작성하면 된다. SELECT rnum , T.* FROM ( SELECT ROWNUM AS rn.. Database/SQL 2016. 1. 14. Oracle 오라클 KEEP()함수 사용법 그룹함수로 조회한 행 중에 다른 컬럼 가져오는 방법 Oracle 오라클 KEEP()함수 사용법 그룹함수로 조회한 행 중에 다른 컬럼 가져오는 방법 그룹함수로 조회한 행 중에 다른 컬럼 가져오는 방법 쿼리를 짜다보면 가장 큰, 가장 작은 값을 가져와야 할 때가 있다. 이럴 땐 MAX() 나 MIN()함수를 사용하여 해당 컬럼을 가져온다. 그런데, 이렇게 MAX 나 MIN 함수로 가져온 값이 있는 행중에 다른 컬럼을 가져와야 한다면 어떻게 해야 할까? KEEP의 사용법을 모르는 경우라면 서브쿼리를 사용하여 가져오려 할 것이다. 예) SELECT 컬럼A FROM 테이블A WHERE 컬럼B = (SELECT MAX(컬럼B) FROM 테이블A) 물론 값은 같다. 하지만 조건없이 구현이 가능하다. KEEP()함수을 사용하여 보자. 예) SELECT MAX(컬럼A)K.. Database/SQL 2015. 12. 22. 오라클 Oracle 가장큰값, 두번째 큰값, 가장작은값, 두번째로 작은값 구하기 GREATEST, LEAST 오라클 Oracle 가장큰값, 두번째 큰값, 가장작은값, 두번째로 작은값 구하기 GREATEST, LEAST 컬럼 내에서 가장 큰 값과 작은 값은 MAX(), MIN()을 사용하면 된다. 하지만 다른 컬럼 중에서 크기나 순위를 정하기 위해서는 GREATEST(), LEAST()를 사용한다. - GREATEST 사용법 GREATEST(col1, col2, col3, col4, ...) ex) GREATEST(OVERSPD_SUM, QUICK_ACCEL_SUM, QUICK_DECEL_SUM, QUICK_TURN_SUM) - LEAST 사용법 LEAST(col1, col2, col3, col4,...) ex) LEAST(OVERSPD_SUM, QUICK_ACCEL_SUM, QUICK_DECEL_SUM, QUI.. Database/SQL 2015. 11. 25. ORACLE LISTAGG 여러 행을 하나의 컬럼으로 가져오기 ORACLE LISTAGG 여러 행을 하나의 컬럼으로 가져오기 11g 에서 추가. 10g 이하는 WM_CONCAT 함수 사용 (WM_CONCAT은 페이지 하단 Link 참고) 오라클에서 여러개의 열로 된 값을 한 행의 값으로 가져와야 할 때 LISTAGG 함수를 사용한다. - 사용방법 SELECT LISTAGG(가져올컬럼, 구분자) WITHIN GROUP (ORDER BY 순서컬럼) FROM TABLE_NM 아래의 예를 보자 예) SELECT DRIVER_NM FROM DRIVER_INFO; DRIVER_INFO 테이블에서 DRIVER_NM 컬럼을 가져왔다. 위와 같은 여러 열의 값을 LISTAGG를 사용하여 하나의 열로 가져와 보자. SELECT LISTAGG(DRIVER_NM, ',') WITHIN .. Database/SQL 2015. 8. 19. 이전 1 2 3 4 다음 💲 추천 글 반응형