본문 바로가기
php개발자(백엔드) /DB_mysql

MYSQL 변수 선언 및 사용

by 장김치 2016. 9. 19.

[MYSQL 변수 선언 및 사용]


회원가입으로 받아온 회원데이터중 생년월일이 있습니다. 

이 생년월일(6자리)로 회원의 나이를 검색하려고 합니다. (만나이는 생각하지 않겠습니다)


먼저 쿼리문 투척합니다


1 SELECT *

2 ,@year := YEAR(CURDATE())

3 ,substr(

4 if (

5 2000 > (@year - substr(mem_birth, 1, 2)),

6 (@year - substr(mem_birth, 1, 2) + 1),

7 @year - substr(mem_birth, 1, 2)

8 )

, 3, 4)  as tmp_ssn

10 FROM member

11 HAVING tmp_ssn like '25'



member 테이블에 생년월일 컬럼(mem_birth)의 값으로 나이를 계산하여 검색하는 방법입니다.




2번 : mysql에서 @는 변수를 선언할때 사용하는데요 year라는 변수를 만들겁니다. 변수명 옆에 := 는 값을 대입하겠다는 '='과 같은 역할이에요~


CURDATE()를 사용하여 현재 날짜 (2016-XX-XX)를 가져와 year함수를 사용하여 년도만 가져옵니다. 


3번 : substr()를 사용하여 원하는 문자열만 가져올거에요.


4번 : mysql안에서 if문을 사용하여 값을 가져올거에요. if("조건","참","거짓") 형식으로 진행됩니다.


5번 : 2000년 이후 출생한 사람들에 대한 계산식이에요. 현재년도에서 생년월일 앞두자리 가져와 빼줍니다. 예를 들어 현재 920101(현재25살), 010101(현재15살) 2명의 경우


ex) 2016 - 92 = 1924 , 2016 - 01 = 2015


6번 : 만약 5번의 값이 2000이하라면 1924의 값에 1을 더해줍니다. 그럼 25살로 맞게 나오죠? 


7번 : 2000보다 큰경우에는 그 값을 그대로 출력합니다. 


9번 : 가상 컬럼 별칭은 tmp_ssn입니다. tmp_ssn의 값중 뒤에 2자리를 출력합니다.


11번 : tmp_ssn은 원래 없던 컬럼이기 때문에 WHERE로 검색을 할수없습니다. 그럴땐 HAVING을 사용하여 검색합니다~!!



'php개발자(백엔드) > DB_mysql' 카테고리의 다른 글

서브쿼리 concat() 검색  (0) 2018.03.05
mysql order by와 limit 활용  (0) 2017.03.10
카페24 DB 연결  (0) 2017.01.20
MYSQL WHERE절 사용  (0) 2016.09.05
기본 쿼리문 (select, update, delete) 구조 및 사용  (0) 2016.08.19