목록IT/MySQL (3)
unscope
시간 차 구하기TIMEDIFF(datetime1, datetime2) 시간 포멧(00:00:00) TIME_FORMAT(time1, '%H:%i:%S') 날짜 포멧(0000-00-00 00:00:00)DATE_FORMAT(datetime1, '%Y-%m-%d %H:%i:%S') NULL 공백 처리COALESCE(obj1, '')# obj1 = null 이면 '' return. 아니면 obj1 return.# 앞쪽부터 순차 비교.IFNULL(obj1, '')# 위와 같음NULLIF(obj1, '')# obj1 = '' 이면 null return. 아니면 obj1 return. 문자열 합치기CONCAT(str1, str2, ...) 자릿수 맞춰서 0 채우기LPAD(int1, 7, 0)# int1을 left..
MySQL에서는 서브쿼리로 현재 변경이 이루어지는 테이블을 참조해서 사용 할 수가 없어요. 예를 들어, 이런 쿼리문을 실행시키려고 합니다. UPDATE TABLE_A SET COLUMN_C = 'A' WHERE COLUMN_B = (SELECT MAX(COLUMN_B) FROM TABLE_A WHERE COLUMN_A = '1') 변경할 테이블과 서브쿼리의 테이블이 같네요. 그러면 장렬하게 에러가 뜹니다. "그런데 저는 지금 같은 테이블의 값을 가져오는 것 외엔 방법이 없는데요!" 라고 하신다면, 아래와 같이 작성하시면 됩니다. UPDATE TABLE_A SET COLUMN_C = 'A' WHERE COLUMN_B = (SELECT B FROM (SELECT MAX(COLUMN_B) AS B FROM T..
어쩌다 보니 이런 걸 만들 일이 생겼습니다. 6자리의 숫자로만 된 난수를 생성해야 해서, 아래처럼 작성했습니다. SELECT LPAD(ROUND(RAND()* 999999, 0), 6, 0) so simple... 하지만 이 난수는 PK가 될 친구입니다. 중복이... 되면 안 돼... 저는 어떻게든 저장 프로시저나 함수를 사용하지 않고 일반 쿼리문만으로 중복을 제외하려고 했고... 개같이 실패했습니다. 방법을 아시는 분의 제보를 열렬히 기다립니다... 하는 수 없이 저장 함수를 하나 만들어서 while 문을 이용해 중복을 제외했습니다. CREATE FUNCTION DB명.함수명() RETURNS VARCHAR(6) BEGIN DECLARE randomNum VARCHAR(6) DEFAULT ''; DEC..