본문 바로가기
반응형

IT/Database97

[Oracle] EXTRACT 함수 관련 Oracle 에서 EXTRACT 라는 함수가 존재한다. 날짜 정보를 분리해서 각각 새로운 형태로 추출을 해주는 함수이다. 설명으로 들어서는 이해가 잘 안갈수도 있으니 직접 예시를 보여주면 ​ 테이블에 날짜 변수가 담긴 X로부터 특정한 날짜요소를 추출하여 새로운 컬럼으로 반환하는 SQL 쿼리 문장의 형태는 다음과 같다. SELECT EXTRACT ('Option' FROM X) as DATE_OPTION FROM TABLE; '날짜요소'에 투입하는 항목에 따라, 날짜 데이터로부터 얻을 수 있는 값이 달라지게 됩니다. Option 에 존재하는 날짜 요소는 아래와 같다. SQL 쿼리에서의 날짜요소 표시 날짜 정보 YEAR 연도 MONTH 월 DAY 일 HOUR 시 MINUTE 분 SECOND 초 즉 아래 쿼리.. 2024. 1. 30.
instr(), like 차이 및 비교 database 에서 컬럼 내 특정 문자열을 찾기위해서 많은 방법이 있다. 대부분 like 를 사용하겠지만, instr 이라는 함수와 함께 알아볼 것이다. 사용법은 둘다 간단하다. 컬럼 내에서 test라는 문구를 찾으려면 like 사용 SELECT * FROM TABLE WHERE COL LIKE '%test%'; instr 사용 SELECT * FROM TABLE WHERE INSTR(COL, 'test'); 현재 쿼리에서는 둘 다 당연히 인덱스를 활용하지는 못한다. 하지만 like문에서는 'test%' 로 설정을 해서 test로 시작하는 ~~ 을 구할수가 있다. 둘의 속도 비교 해보았고 결론은 like 'ABC%' 일때 : 앞에 %가 없을때는 like 사용 like '%ABC%' or '%ABC' 일.. 2024. 1. 29.
[Oracle] Unix Time To oracle sql (소수점 까지 f 로 ) Unix Time To 일반 시간 ​ SELECT TO_CHAR(TO_DATE('19700101090000', 'YYYYMMDDHH24MISS') +( UNIXTIME/86400),'MM/DD HH24:MI:SS') FROM TABLENAME; ​ 만약 milli seconds 까지 있다면 86400 이 아닌 86400000으로 나눠야한다. ​ 일반 시간 To Unix Time ​ SELECT TO_NUMBER( DATETIME-TO_DATE('01-Jan-1970 00:00:00', 'DD-Mon-YYYY HH24:MI:SS'))*24*60*60 FROM TALBENAME; 만약 milliseconds 까지 있다면 (3자리 경우) TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:M.. 2024. 1. 25.
[Mysql] Specified key was too long 특정 테이블에 index를 걸고자 할때 아래 에러가 발생하였다. Error Code: 1071. Specified key was too long; max key length is 3072 bytes 원인은 해석 그대로 이다. 인덱스에 사용하는 글자 최대 크기가 정해져있다는것이다. 테이블에 사용하는 인코딩은 UTF8MB4 였고 여기서 한 글자당 4byte를 잡아먹는다. 3072 바이트를 넘을수 없다면 대략 750 글자까지만 허용이 가능하다. 인코딩에 따라 글자 byte수가 다르니 확인해야하고, 인덱스는 별도의 공간을 차지하기에 이렇게 큰 값은 인덱스로 배제하는것이 좋은 선택일듯 싶다. 2024. 1. 23.
[Mysql]GROUP_CONCAT 관련(order by, 구분자, 인코딩) CONCAT 에 대해서는 아래 참고 포스팅을 참고 바란다. Group By 별로 특정 컬럼을 CONCAT 해서 보여주고 싶을 경우 GROUP_CONCAT을 사용한다. 사용법은 아래와 같다. ID NAME AGE test1 AAA 1 test2 BBB 2 test2 CCC 3 여기에서 SELECT ID, GROUP_CONCAT(NAME) FROM TABLE GROUP BY ID; 를 할 경우 test1 , AAA test2 , BBB,CCC 이렇게 출력이 된다. 정렬 ... GROUP_CONCAT(NAME ORDER BY AGE) ... 구분자 변경 ... GROUP_CONCAT(NAME SEPARETOR '-') ... 중복 제거 ... GROUP_CONCAT(DISTINCT NAME) ... 참고 포스.. 2024. 1. 22.
UUID 만들기 / UUID,GUID 차이 이전 포스팅에서 UUID에 대해 다룬적이 있다. 자세한 내용은 참고 포스팅 참고 바란다. 테이블을 생성할때 pk를 지정하기가 애매하고 복합키로 하자니 문제가 있고 등등 그리하여 UUID를 만들어서 pk로 지정하려고 한다. 그럴경우에 UUID를 어떻게 컬럼 생성해야할까? CREATE TABLE TABLE_NAME( UUID VARCHAR2(50) DEFAULT SYS_GUID(), .. .. 이렇게 SYS_GUID 로 지정해준다. UUID 와 GUID 의 차이는 아래와 같다. UUID GUID 범용 고유 식별자 네트워크 상에서 서로 모르는 개체들을 식별하고 구 별하기 위해서는 각각의 고유한 이름이 필요하다. 전역 고유 식별 사용자 어플리케이션에서 사용되는 유사난수. GUID는 생성할 때 항상 유일한 값이 .. 2024. 1. 5.
소트 튜닝 (sort 오퍼레이션) SQL 수행 중 Sort 가 필요한 경우 dbms는 정해진 메모리 공간에 sort area 를 할당하고 정렬을 수행하곤 한다. Oracle은 PGA(Private Global Area) 에 Sqlserver 는 버퍼캐시에 저장을 하곤 한다. 소트를 발생시키는 오퍼레이션은 아래와 같다. Sort Aggregate : 전체 로우를 대상으로 집계를 수행할 때 나타나며, 아래와 같이 Oracle 실행계획에 ‘sort’라는 표현이 사용됐지만 실제 소트가 발생하진 않는다. SQL Server 실행계획엔 ‘Stream Aggregate’라고 표시된다. Sort Order By : 정렬된 결과집합을 얻고자 할 때 나타난다. Sort Group By : Sorting 알고리즘을 사용해 그룹별 집계를 수행할 때 나타난다... 2024. 1. 1.
최대, 최소값(GREATEST, LEAST) 일반적으로 쿼리에서 최대 최소 값이라고 하면 Max 와 Min 함수를 의미하지만 이번 포스티에서 다루는 함수는 GREATEST, LEAST 이다. 값들 중에 최대값과 최솟값을 반환하는 함수이다. 사용법은 아래와 같다. SELECT GREATEST(10, 20, 30, 40, 50) FROM dual -- 결과 50 반환 SELECT LEAST(10, 20, 30, 40, 50) FROM dual -- 결과 10 반환 숫자 이외에도 문자열이나 날짜도 사용이 가능하다. SELECT LEAST('AAA', 'BBB', 'CCC', 'DDD') FROM dual -- 결과 AAA 반환 SELECT LEAST(SYSDATE, SYSDATE + 1, SYSDATE + 2) FROM dual -- 결과 SYSDATE.. 2023. 12. 29.
[mysql] 데이터 경로 변경(datadir) mysql 이나 mariadb를 사용할 경우 데이터 폴더의 경로를 확인하는 법은 아래와 같다. select @@datadir; 기본적으로는 /var/lib/mysql 이 default 이다. 변경을 위해서는 여러 작업이 있지만 스텝으로 나눠서 진행 해보면 1. mysql 서비스 중지 -> sudo systemctl stop mariadb 2. 현재 사용중인 폴더를 앞으로 사용할 폴더로 복사해준다. -> rsync -av /var/lib/mysql 이동할경로 참고로 rsync 를 사용해야 하며 해당 명령어는 아래 참고포스팅에서 참고 바란다. 3. mysql 설정정보에서 데이터 경로 변경하기 -> sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf 로 들어가서 datadir.. 2023. 12. 26.
반응형