sortNum이라는 컬럼에 NULL이 들어가 있습니다. 애초에 default 값을 넣어주면 이런 일이 없겠지만 모종의(?) 이유로 바꿀 수 없다고 가정을 합니다.SELECT * FROM #table ORDER BY `sortNum` ASC정렬을 하게 되면 NULL인 것들이 가장 위로 올라옵니다. 그렇다고 NULL인 애들을 아래로 보내자고 DESC를 하면 2, 1 이런 식으로 정렬이 될 테니 문제가 됩니다. 아래처럼 is null을 써서 처리하시면 됩니다.SELECT * FROM #table ORDER BY `sortNum` IS NULL ASC, `sortNum` ASC
member라는 테이블에 address라는 컬럼이 있습니다.이 컬럼의 값이 "서울특별시 어쩌고 저쩌고..." 이렇게 되어 있다고 가정을 합니다.원하는 결과는 "[주소]서울특별시 어쩌고 저쩌고..."입니다. MySQLUPDATE `member` SET `address` = CONCAT("[주소]", `address`) MSSQLUPDATE member SET address = address + "[주소]"
해당 컬럼의 타입을 DATETIME으로 하면 안 되고 TIMESTAMP로 하면 됩니다.5.6.x 이상부터는 사용 가능합니다.
SELECT * FROM TABLE ORDER BY `sortNum` 이렇게 했을 때 저렇게 결과가 나왔습니다. 원래대로라면 1, 2, 3... 이렇게 되어야 하는데 말이지요. 해당 칼럼 타입을 보면 char, varchar 이런 걸로 되어 있을 겁니다. 가장 좋은 방법은 해당 칼럼 타입을 int 혹은 tinyint 이런 걸로 바꾸면 됩니다. 그런데 칼럼 타입 변경을 마음대로 할 수 없는 경우엔 형 변환을 하면 됩니다. SELECT * FROM TABLE ORDER BY CAST(`sortNum` AS unsigned)
정렬 순서가 2, 3, 1, 4 이 순으로 되길 바랍니다. SELECT * FROM #table ORDER BY FIELD(`parent`, 2, 3, 1, 4) MySQL 내장 함수인 FIELD를 사용하시면 됩니다. FIELD(정렬 기준인 칼럼명, 값1, 값2, 값3, 값4)
parent가 1이면서 1000 초과일 경우 1 parent가 2이면서 1000 초과일 경우 2 나머지는 그냥 정렬 SELECT * FROM #table ORDER BY CASE WHEN (`parent` = 1 AND `cost` > 1000) THEN 1 WHEN (`parent` = 2 AND `cost` > 1000) THEN 2 END DESC