기존에 개발된 SQL 코드는 PostgreSQL 기반으로 만들어졌지만,
새로운 프로젝트에서는 MySQL을 요구하였다.
그래서 해당 문법들의 차이와 MySQL에 대한 함수를 익힐 필요가 생겨 메모하였다.
특정 함수
PostgreSQL의 CASE WHEN
대신에 사용하면 매우 효율적일 것이다.
-- MySQL
SELECT IF( 5-3 > 0, 'TRUE', 'FALSE' );
-- PostgreSQL
SELECT CASE WHEN 5-3 > 0 THEN 'TRUE' ELSE 'FALSE' END;
NULL 대신 다른 문구를 리턴해줄 수 함수이다.
PostgreSQL의 COALESCE
보다 직관적인 명칭의 함수이다.
-- MySQL
SELECT IFNULL( NULL, 'IS NULL');
-- PostgreSQL
SELECT COALESCE( NULL, 'IS NULL');
IFNULL( ) : 칼럼이나 표현식 값이 NULL인지 비교하고, NULL이면 다른 값으로 대체하는 용도로 사용된다. NULL(null, 1) #1
ISNULL( ) : 인자를 전달한 표현식이나 칼럼의 값이 NULL이면 1, 아니면 0을 반환한다
SYSDATE( ) : 함수가 호출될 때마다 그 시각을 반환한다 → 그때그때 다른 값 반환
NOW( ) : 쿼리가 실행되는 시점에 실행되고 값을 할당받아 그 값을 SQL 문장의 모든 부분에서 사용하게 한다
DATE_FORMAT( ) : DATETIME 타입의 칼럼이나 값을 원하는 형태의 문자열로 변환
DATE_ADD(NOW( ), INTERVAL 1 DAY) : 지금 시간에서 하루를 더한다. 1대신 -1을 넣으면 하루를 뺀다.
UNIX_TIMESTAMP( ) : '1970-01-01 00:00:00'으로부터 경과된 초의 수를 반환
FROM_UNIXTIME( ) : 인자로 전달한 타임스탬프 값을 DATETIME으로 변환
RPAD( ) LPAD( ) : 문자열의 좌측 또는 우측에 문자를 덧붙여 지정된 길이의 문자열로 만든다
RTRIM( ) LTRIM( ) : 문자열의 우측 또는 좌측에 연속된 공백 문자를 제거하는 함수
TRIM( ) : RTRIM( )과 LTRIM( )을 동시에 수행
CONCAT( ) : 여러 개의 문자열을 하나의 문자열로 변환하는 함수
GROUP_CONCAT( ) : 값들을 먼저 정렬한 후 연결하거나 각 값의 구분자 설정, 중복제거 연결 등을 할 수 있는 함수
CASE WHEN THEN END : if else 느낌, WHEN column < value 처럼 조건도 넣을 수 있다
CAST( ) : 타입을 변환할 수 있는 함수
CONVERT( ) : CAST( )를 포함하며, 문자열의 문자집합(utf8)을 변환할 수 있다
HEX( ) : 이진값을 사람이 읽을 수 있는 16 진수 문자열로 변환한다
UNHEX( ) : 16진수의 문자열을 이진값으로 변환한다
SHA( ) : SHA-1 암호화 알고리즘을 사용하여 160비트의 해시 값을 반환한다
MD5( ) : Message Digest 알고리즘을 사용해 128비트의 값을 반환한다
SLEEP( ) : 말 그대로 sleep ^^;
BENCHMARK( ) : 간단한 함수 성능 테스트로 유용한 함수
INET_ATON( ) : 문자열로 구성된 IP 주소를 정수형으로 변환
INET_NTOA( ) : 정수를 문자열 IP 주소로 변환
PASSWORD( ), OLD_PASSWORD( ) : 쓰지마라
COUNT( ) : count(*) 표기나 count(1)이나 다를게 없다. 혹시 column을 count안에 넣었는데 NULL이면 그 값을 제외하고 counting하니 주의해야 한다