SQL 9

[MySQL]TIMESTAMPDIFF() 시간, 날짜 차이

SELECT TIMESTAMPDIFF(HOUR, '2022-12-02 20:20:20', '2022-11-30 11:11:11'); TIMESTAMPDIFF(단위, datetime1, datetime2) 단위는 SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER(분기), YEAR 이렇게 쓸 수가 있습니다. datetime1이 datetime2보다 클 경우 결과는 음수가 나옵니다. 그래서 어지간하면 datetime1이 datetime2보다 작게 될 수 있도록 입력하시는 게 좋습니다. 등록한 날짜 기준으로 1시간이 안 된 것들을 갖고 오는 걸 예제로 들자면(칼럼명은 regdate로) SELECT * FROM #table WHERE TIMESTAMPDIFF(MINUTE, `r..

SQL 12:14:19

[MySQL]특정 조건에 포함되지 않는 모든 데이터 삭제하기

위 이미지는 번호(no)를 기준으로 내림차순으로 정렬한 것입니다. 여기에서 해야 할 게 최근에 등록한 10개를 빼고는 다 삭제를 해야 합니다. 그러려면 ORDER BY `no` DESC / LIMIT 10 이걸 두 개 얼추 조합해서 NOT IN을 하면 되지 않을까 생각합니다. 그런데 MySQL에서는 아직 안 됩니다. This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 이런 오류를 띄우고 멈춥니다. SELECT MIN(`no`) FROM (SELECT `no` FROM `da_temporary_save` WHERE `userid` = 'test' ORDER BY `no` DESC LIMIT 10) AS xxxx 이미지에서..

SQL 2022.06.16

[MySQL]UNION ALL에서 테이블별로 다른 조건으로 정렬

(SELECT `name`, `age`, `address` FROM #table1) UNION ALL (SELECT `name`, `age`, `address` FROM #table2) ORDER BY `age` 보통 UNION ALL에서 정렬은 저렇게 통(?)으로 하는 편입니다. 각각의 테이블마다 정렬을 하려면 SELECT ~ FROM #table1 ORDER BY `age` 이렇게 하면 되지 않을까 하지만 안 됩니다. SELECT `name`, `age`, `address` FROM (SELECT `name`, `age`, `address` FROM #table1 ORDER BY `age`) AS A UNION ALL SELECT `name`, `age`, `address` FROM (SELECT `..

SQL 2021.04.02

[MySQL]ORDER BY

SELECT * FROM TABLE ORDER BY `sortNum` 이렇게 했을 때 저렇게 결과가 나왔습니다. 원래대로라면 1, 2, 3... 이렇게 되어야 하는데 말이지요. 해당 칼럼 타입을 보면 char, varchar 이런 걸로 되어 있을 겁니다. 가장 좋은 방법은 해당 칼럼 타입을 int 혹은 tinyint 이런 걸로 바꾸면 됩니다. 그런데 칼럼 타입 변경을 마음대로 할 수 없는 경우엔 형 변환을 하면 됩니다. SELECT * FROM TABLE ORDER BY CAST(`sortNum` AS unsigned)

SQL 2020.03.10

[MySQL]ORDER BY

pno : project 테이블의 no mno : member 테이블의 no 클라이언트가 이런 요구를 했습니다. 프로젝트별로 정렬을 하되 여기에서 글을 쓴 사람이 있는 값부터 우선 정렬을 하고 없는 사람들은 그냥 no를 기준으로 정렬을 하라고... 21 / 5532 3 / 8026 20 / 8127 1 / 8155 4 / 0 5 / 0 ... 생략 ... 그러면 결과는 위와 같겠네요. 보통은 `pno` DESC, `mno` ASC 이런 식으로 하면 되겠지만 칼럼 값이 0인 애들이 있습니다. 내림차순이면 상관이 없는데 하필이면 오름차순이네요. 그러면 0인 애들이 제일 상단에 가게 됩니다. mno 칼럼 값이 0인 애들은 1000000000 이 값을 넣어 버리고 no 칼럼을 기준으로 정렬을 하면 됩니다. SE..

SQL 2020.02.14

[MySQL]LIKE IN 비슷하게...

칼럼 하나에서 여러 단어로 검색할 때 LIKE를 여러 번 써야 하는 수가 있습니다. SELECT * FROM #table WHERE `column` LIKE '%aaa%' OR `column` LIKE '%bbb%` OR `column` LIKE `%ccc%' 너무 무식하게 길어집니다. 이런 때 REGEXP 연산자를 써서 SELECT * FROM #table WHERE `column` REGEXP 'aaa|bbb|ccc' 이렇게 줄여서 쓰면 됩니다. 반대의 경우도 있습니다. 칼럼 여러 개에 하나의 단어로 검색할 때입니다. 이런 때는 아래처럼 쿼리를 씁니다. SELECT * FROM #table WHERE `column1` LIKE '%aaa%' OR `column2` LIKE '%aaa%` OR `col..

SQL 2020.02.13