날짜 값으로 MySQL 레코드 검색하기MySQL에서는 특정 날짜와 일치하는 레코드를 손쉽게 조회할 수 있습니다. 여기서는 detail_bday라는 테이블에 저장된 생일 데이터를 예로 들어, 날짜 조건으로 레코드를 검색하는 두 가지 방법을 소개하겠습니다.예제 테이블 데이터먼저 detail_bday 테이블에 들어 있는 전체 데이터를 확인해 보겠습니다.mysql> Select * from detail_bday; +----+---------+------------+ | Sr | Name | Birth_Date | +----+--
MySQL에서 UPDATE 문의 SET 절에 새 값을 할당하기 위해 사용된 하위 쿼리가 아무런 행도 반환하지 않는 경우, MySQL은 해당 열에 NULL 값을 할당합니다. 다음 예제를 통해 이를 직접 확인해 보겠습니다.예제먼저 두 개의 테이블, 즉 student 테이블과 info 테이블이 있다고 가정해 보겠습니다.mysql> Select * from student; +----+---------+-----------+ | Id | Name | grade | +----+---------+-----------+ | 1
MySQL에서 CHAR는 고정 길이(fixed-length) 문자열을 저장하기 위해 사용되고, VARCHAR는 가변 길이(variable-length) 문자열을 저장하기 위해 사용됩니다.따라서 한 컬럼은 CHAR 타입으로, 다른 컬럼은 VARCHAR 타입으로 각각 선언하면 고정 길이 문자열과 가변 길이 문자열을 동일한 테이블 안에서 함께 관리할 수 있습니다.예제아래 예제에서는 FirstName 컬럼을 CHAR(10)으로, LastName 컬럼을 VARCHAR(10)으로 선언하여 Employees 테이블을 생성하고, DESC 명령으로
MySQL에서 SERIAL과 AUTO_INCREMENT는 모두 필드의 기본값으로 순차적인 번호(시퀀스)를 자동 생성하는 데 사용되는 기능입니다. 하지만 두 기능은 내부 동작 방식과 문법적 성격에서 중요한 차이점을 가지고 있습니다. AUTO_INCREMENT란? AUTO_INCREMENT 속성은 BIT와 DECIMAL을 제외한 모든 숫자 데이터 타입에서 사용할 수 있습니다. 한 테이블에는 오직 하나의 AUTO_INCREMENT 필드만 존재할 수 있으며, 한 테이블에서 생성된 시퀀스 값을 다른 테이블에서 재사용할 수 없습니다. 또한
MySQL에서 WHERE 절에 지정한 조건이 여러 행과 일치한다면, 단일 UPDATE 문만으로 여러 행의 열 값을 한 번에 업데이트할 수 있습니다. 이 경우 SET 절은 조건에 일치하는 모든 행에 동일하게 적용됩니다.예제로 살펴보기다음과 같은 tender 테이블이 있다고 가정해 보겠습니다.mysql> Select * from tender; +-----------+---------+------+ | tender_id | company | rate | +-----------+---------+------+ | 200
MySQL 테이블 값 업데이트하기MySQL에서 테이블에 저장된 데이터를 수정하려면 UPDATE 문과 WHERE 절을 함께 사용합니다. 이 조합을 활용하면 단일 행 또는 여러 행의 값을 한 번에 변경할 수 있으며, MySQL은 WHERE 절에 지정된 조건을 기준으로 해당 행만 선택적으로 업데이트합니다.UPDATE 문의 기본 문법UPDATE 테이블명 SET 컬럼1 = 값1, 컬럼2 = 값2 WHERE 조건;SET 절에는 변경하고자 하는 컬럼과 새로운 값을 지정하고, WHERE 절에는 어떤 행을 수정할지 결정하는 조건을 작성합니다.실제
FROM_UNIXTIME() 함수의 반환값을 숫자 형식으로 얻기MySQL에서는 datetime 값에 0을 더하면(+0) 해당 값을 정수형 숫자로 변환할 수 있습니다. 이와 동일한 방식으로 FROM_UNIXTIME() 함수가 반환하는 datetime 값도 숫자 형식으로 변환할 수 있습니다.아래 예제를 통해 그 방법을 쉽게 확인할 수 있습니다.mysql> Select FROM_UNIXTIME(1555033470)+0 AS Date in Numeric Format; +------------------------+ | Date in
MySQL의 STR_TO_DATE() 함수는 문자열 값을 지정된 형식에 따라 DATETIME(날짜·시간) 값으로 변환해 주는 함수입니다. 이 함수를 사용하려면 변환할 문자열과 해당 문자열의 날짜 형식을 나타내는 포맷 문자열, 두 개의 인자를 반드시 함께 전달해야 합니다.STR_TO_DATE() 함수 기본 문법STR_TO_DATE(string, format)여기서 string은 DATETIME 값으로 변환하고자 하는 문자열이며, format은 그 문자열이 어떤 날짜 형식으로 작성되어 있는지 지정하는 포맷입니다.STR_TO_DATE()
테이블을 생성할 때 특정 컬럼에 기본값(default value)이 정의되어 있다면, INSERT 문에서 DEFAULT 키워드를 사용하여 해당 컬럼에 미리 정의된 기본값을 자동으로 입력할 수 있습니다.1. 기본값이 설정된 테이블 생성먼저 DOJ 컬럼에 기본값 2005-01-01이 설정된 employee 테이블을 생성해 보겠습니다.mysql> Create table employee(id int, name varchar(20), doj date DEFAULT '2005-01-01');Query OK, 0 rows a
STR_TO_DATE() 함수에 잘못된 문자열 전달 시 결과MySQL에서 STR_TO_DATE() 함수에 유효하지 않은 문자열을 인수로 전달하면, 함수는 NULL을 반환하고 함께 경고(warning)를 발생시킵니다.예제다음 예제를 통해 이를 확인해 보겠습니다.mysql> Select STR_TO_DATE(20173210, %Y%d%m); +-----------------------------------+ | STR_TO_DATE(20173210, %Y%d%m) | +----------------------------------
형식 문자열과 날짜 문자열이 일치하지 않을 때의 결과MySQL의 STR_TO_DATE() 함수에서 지정된 형식 문자열(format string)과 날짜 문자열(date string)이 서로 일치하지 않으면, MySQL은 NULL 값을 출력으로 반환하고 경고(warning)를 함께 표시합니다.아래 예제를 통해 직접 확인해 보겠습니다.예제 1: 구분자(쉼표) 불일치mysql> Select STR_TO_DATE(20172810, %Y,%d%m); +------------------------------------+ | STR_TO_
데이터베이스 작업을 하다 보면 두 날짜(또는 날짜+시간) 사이의 정확한 기간을 년, 월, 일, 시간, 분, 초 단위로 구해야 하는 경우가 자주 있습니다. 이 글에서는 이러한 계산을 한 번에 처리해 주는 MySQL 사용자 정의 함수(UDF)를 만드는 방법을 소개합니다.Duration 함수와 Label123 헬퍼 함수아래 예제는 두 개의 함수로 구성됩니다. 핵심 역할을 하는 Duration 함수와, 값 뒤에 단위 라벨을 붙여주고 단수·복수형을 자동으로 처리해 주는 Label123 헬퍼 함수입니다.mysql> DROP FUNCTIO
MySQL에서 GET_FORMAT() 함수는 DATE_FORMAT() 및 STR_TO_DATE() 함수와 결합하여 사용하면 매우 유용합니다. 이 조합을 활용하면 날짜와 시간 데이터를 국가별 표준 형식으로 손쉽게 변환하거나 해석할 수 있습니다.DATE_FORMAT()과 결합하기GET_FORMAT() 함수를 DATE_FORMAT() 함수와 결합하면, GET_FORMAT()이 반환하는 형식 문자열을 그대로 적용하여 특정 날짜, 시간 또는 datetime 값을 원하는 지역 형식으로 출력할 수 있습니다.mysql> Select DATE
MySQL의 GET_FORMAT() 함수는 DATE, TIME, DATETIME 또는 TIMESTAMP 같은 날짜·시간 데이터 타입을, 두 번째 인자로 지정한 표준 형식에 맞는 포맷 문자열로 변환해 주는 함수입니다. 표준 형식으로는 EUR, INTERNAL, ISO, JIS, USA 다섯 가지를 사용할 수 있으며, 반환되는 포맷 코드는 DATE_FORMAT() 함수에서 사용하는 것과 동일합니다.이 함수는 단독으로 사용되기보다는 DATE_FORMAT()이나 STR_TO_DATE() 함수와 함께 조합하여 활용할 때 특히 유용합니다. 국
SELECT 문에서 GROUP BY 절은 MySQL이 반환하는 결과 집합을 여러 개의 그룹으로 나누는 역할을 합니다. 그런데 전체 그룹이 아니라 특정 조건을 만족하는 일부 그룹만 조회하고 싶다면, 그룹 수준에서 필터링 기준을 적용해야 합니다. 이때 GROUP BY 절과 함께 HAVING 절을 사용하면 됩니다.HAVING 절의 역할WHERE 절이 개별 행(row) 단위로 조건을 거는 것과 달리, HAVING 절은 그룹화가 완료된 이후의 집계 결과(AVG, COUNT, SUM 등)를 대상으로 조건을 적용합니다. 따라서 평균 급여가 55
MySQL에서 SELECT 문에 GROUP BY 절을 사용하면 결과 집합을 그룹으로 나눌 수 있습니다. GROUP BY 절 뒤에 특정 열을 지정하면 해당 열이 그룹화 기준이 되며, 같은 값을 가진 행들이 하나의 그룹으로 묶입니다. 이를 통해 MySQL SELECT 문이 반환하는 결과 집합을 여러 개의 그룹으로 분할할 수 있습니다.예제다음 예제를 통해 GROUP BY의 동작 방식을 쉽게 이해할 수 있습니다.먼저 아래와 같은 employees 테이블이 있다고 가정해 보겠습니다.mysql> Select * from employees
Unix 타임스탬프를 MySQL 타임스탬프로 변환하기MySQL에서는 FROM_UNIXTIME() 함수를 사용하여 Unix 타임스탬프(Unix 에포크 이후 경과된 초 단위 시간)를 timestamp 데이터 타입의 값으로 손쉽게 변환할 수 있습니다.이 함수는 인자로 전달받은 Unix 타임스탬프를 YYYY-MM-DD HH:MM:SS 형식의 날짜 및 시간 값으로 반환하며, 사용 문맥에 따라 YYYYMMDDHHMMSS와 같은 숫자 형식으로 반환되기도 합니다.예시mysql> Select FROM_UNIXTIME(1508622563); +
애플리케이션 레벨에서 복잡하게 처리하던 날짜와 시간 포맷팅 작업은 DATE_FORMAT() 함수를 활용하면 MySQL에 손쉽게 위임할 수 있습니다. 함수의 인자로 전달되는 포맷 단위(형식 지정자)에 따라 MySQL이 알아서 원하는 형태의 결과만 반환해 주기 때문입니다.날짜만 추출하기DATE_FORMAT() 함수에 날짜 관련 포맷 단위를 인자로 넘기면, MySQL은 날짜 부분만 지정한 형식으로 가공하여 반환합니다.mysql> Select DATE_FORMAT(2017-10-22 13:03:45, %Y %M %D) AS OFFLO
TIME_FORMAT() 함수란 무엇인가?MySQL의 TIME_FORMAT() 함수는 DATE_FORMAT() 함수와 매우 유사한 방식으로 동작하지만, 한 가지 중요한 차이점이 있습니다. 바로 시간(time) 값만 추출할 수 있다는 점입니다.만약 TIME_FORMAT() 함수에 날짜(date) 형식 단위를 전달하면, MySQL은 에러 대신 NULL 값을 반환합니다. 이 점을 반드시 기억해 두어야 의도치 않은 결과를 피할 수 있습니다.시간 값 추출 예제아래 예제처럼 시간 관련 형식 단위(%h, %i, %s, %p)를 인수로 전달하면,
MySQL에서 지정된 날짜 값으로부터 월(Month)과 일(Day) 정보를 추출하는 작업은 데이터 처리 과정에서 매우 자주 사용됩니다. 이를 구현하는 방법은 크게 두 가지가 있으며, 각각의 방법과 예제를 살펴보겠습니다.방법 1: EXTRACT() 함수 활용EXTRACT() 함수는 MySQL의 TIMESTAMP 또는 DATE 값에서 원하는 특정 부분을 추출할 수 있는 강력한 함수입니다. 함수의 인자로 추출하고자 하는 단위(예: MONTH, DAY)와 대상 날짜를 함께 전달하면 됩니다. 다음은 주어진 날짜 2017-10-22에서 월과