데이터베이스 쿼리를 작성하는 경우 퀴리에 사용된 문자열의 일부만(자르거나) 사용하는 방법을 알아보겠습니다.

쿼리문 자체에서 문자열을 자르는 경우가 아주 많지는 않을 것입니다. 검색하기 위해 SELECT 문을 사용하는 경우... 검색에 해당되는 키워드의 일부만 사용하는 경우가 그 예가 될 수 있겠죠. 아래 예제는 저장된 날짜의 년/월/일/시간 중에서 일부인 년 또는 월만 사용하기 위해서 문자열을 자르는 방법을 예로 알아봅니다.



# 쿼리문의 문자열 자르기
먼저 쿼리문에 사용가능한 함수로 substr() 함수를 사용할 수 있습니다. 이 함수는 일정 문자열에서 선택한 길이 만큼만 잘라 가져올 수 있습니다. 간단한 사용방법은 아래와 같습니다.

substr(문자열, 시작위치, 나타낼 개수)

첫 번째 인자값으로는 함수를 적용할 대상 문자열이됩니다. 그리고 두 번째 인자는 시작 위치이며 첫 번째 문자를 기준으로 1부터 시작.. 2, 3, 4로 이어집니다. 마지막 나타낼 개수는 보여질 문자 개수를 의미합니다.


! 날짜의 일부문만 사용하는 예제보기
아래 예제는 날짜 일부만 substr() 함수를 사용하여 검색하는 쿼리문입니다. php를 사용한 예제입니다.
<?php
  $query = "SELECT * FROM tableName WHERE SUBSTR(date, 1, 4) > $thisyear";
?>

위에 해당하는 코드는 데이터베이스에 저장된 테이블에서 값을 찾게됩니다. 이때 날짜가 저장된 date 필드에 저장된 값을 불러와 첫번째부터 4번째 단어까지만 불러옵니다. 만약 데이터베이스에 저장된값이 '2015-01-01'이라면 '2015'를 불러오게됩니다. 이 값이 php변수 $thisyear와 크고 작음을 비교하는 간단한 예제입니다. substr() 함수는 PHP의 substr() 함수와 이름이 같기때문에 함께 외우면 좋습니다.


! 날짜를 합쳐야 하는 경우
만약 날짜에 구분문자가 있는경우 substr() 함수와 함께 concat() 함수로 합쳐서 사용할 수 있습니다. 예를 들면 아래처럼 사용이 가능합니다.
<?php
  $query = "SELECT * FROM tableName WHERE CONCAT(SUBSTR(date, 1, 4), SUBSTR(date, 6, 2)) > $thisyear";
?>

이렇게 사용하면 201501이 출력됩니다.

여기까지 쿼리문에 적용 가능한 함수 substr()을 사용해보았습니다. 함수명이 php 뿐만 아니라 다른 언어에서도 많이 사용되는 이름이라 많이 익숙하실꺼라 생각됩니다.