mysql - 변환함수, Cast, if

정하윤·2023년 3월 8일
0

변환함수

date_format

  • 날짜 데이터 → 문자열로 변환

  • 날짜의 요소값을 원하는 형식으로 문자열로 만들어 출력하는 함수

원- 하는 형식문자는 순서나 반복 사용도 제한이 없으므로 원하는 형태로 작성해서 활용할 수 있다.

SELECTnow(),date_format(now(),'%Y-%M-%d')ASNOW;

now() |NOW |

-------------------+----------------------+

2023-03-06 15:27:52|2023/March/06 15:27:52|

SELECTemployee_id,date_format(hire_date,'%Y-%M-%d %W')AS"입사일"
FROMemployees;

employee_id|입사일 |

-----------+--------------------------+

    100|1987-June-17 Wednesday    |

    101|1989-September-21 Thursday|

    102|1993-January-13 Wednesday |

    103|1990-January-03 Wednesday |

    104|1991-May-21 Tuesday       |

    105|1997-June-25 Wednesday    |

    106|1998-February-05 Thursday |

    107|1999-February-07 Sunday   |

    108|1994-August-17 Wednesday  |
    
   

Cast

  • 데이터를 지정한 데이터타입으로 변환해주는 함수
  • signed : 입력된 값을 부호가 있는 정수로 변환

SELECTcast("123"AS signed),cast("-123.45"AS signed);

cast("123" AS signed)|cast("-123.45" AS signed)|

---------------------+-------------------------+

              123|                     -123|
  • unsigned : 입력된 값을 부호가 없는 양의 정수로 변환

SELECTcast("123"ASunsigned),cast("123.45"ASunsigned);

cast("123" AS unsigned)|cast("123.45" AS unsigned)|

-----------------------+--------------------------+

                123|                       123|
  • 부호가 있는 숫자의 경우 가장 왼쪽 끝의 자리값은 양수 음수를 표현하는 플래그로 사용된다.
  • 다음과 같이 음수의 값인 경우 해당 플래그의 값이 1이 되는데, 아래와 같이 unsigned로 변환을 하는 경우 부호 플래그를 숫자값으로 취급하게 되면서 매우 큰 수로 변환이 되어 버린다.

SELECTcast("-123.45"ASunsigned);

cast("-123.45" AS unsigned)|

---------------------------+

   18446744073709551493|

IF

  • 조건식의 참, 거짓 여부에 따라서 출력값을 정할 수 있는 함수

SELECTif(100>200,'참','거짓')AS"결과";

결과|

--+

거짓|

SELECTemployee_id, salary,if(salary>10000,'1등급','2등급')"급여 등급"
FROMemployees;

employee_id|salary |급여 등급|

-----------+--------+-----+

    100|24000.00|1등급  |

    101|17000.00|1등급  |

    102|17000.00|1등급  |

    103| 9000.00|2등급  |

    104| 6000.00|2등급  |

    105| 4800.00|2등급  |

ifnull

  • NULL의 대체값을 출력할 수 있는 함수

  • ifnull(입력값, NULL대체값)

  • 입력된 값이 NULL이 아닌 경우 그대로 입력값이 결과로 출력, NULL인 경우 대체값으로 입력된 값이 출력된다.

  • 컬럼의 값과 NULL의 대체값은 같은 함수의 출력결과이므로 하나의 컬럼에 동시에 출력될 수 있도록 동일한 데이터타입으로 구성되어야 한다.

SELECTifnull(NULL,'널이네')AS"결과1",
ifnull(100,'널널이네')AS"결과2";
결과1|결과2|

---+---+

|100|

SELECTemployee_id, first_name, last_name,
NULLIF(length(first_name),length(last_name))AS"결과"
FROMemployees;

employee_id|first_name |last_name |결과|

-----------+-----------+-----------+--+

    100|Steven     |King       | 6|

    101|Neena      |Kochhar    | 5|

    102|Lex        |De Haan    | 3|

    103|Alexander  |Hunold     | 9|

    104|Bruce      |Ernst      |  |

    105|David      |Austin     | 5|

    106|Valli      |Pataballa  | 5|

    107|Diana      |Lorentz    | 5|
    
    

case

  • 기준 값과 여러 조건값들을 비교하여 다양한 결과를 출력해주는 연산자

CASE 기준컬럼 WHEN 조건값1 THEN 출력값1
[WHEN 조건값2 THEN 출력값2 …][ELSE 기본값]
END

SELECTCASE10WHEN1THEN'일'
WHEN5THEN'오'
WHEN10THEN'십'
ELSE'모름'
ENDAS"case예제";

case예제|

------+

십 |

SELECTemployee_id, last_name, department_id,CASEdepartment_idWHEN10THEN'부서 10'
WHEN50THEN'부서 50'
WHEN100THEN'부서 100'
WHEN150THEN'부서 150'
WHEN200THEN'부서 200'
ELSE'기타 부서'
ENDAS"부서 정보"
FROMemployees;

employee_id|last_name |department_id|부서 정보 |

-----------+-----------+-------------+------+

    100|King       |           90|기타 부서 |

    101|Kochhar    |           90|기타 부서 |

    102|De Haan    |           90|기타 부서 |

    103|Hunold     |           60|기타 부서 |

    104|Ernst      |           60|기타 부서 |

    105|Austin     |           60|기타 부서 |

    106|Pataballa  |           60|기타 부서 |

    107|Lorentz    |           60|기타 부서 |

    108|Greenberg  |          100|부서 100|

    109|Faviet     |          100|부서 100|

    110|Chen       |          100|부서 100|

    111|Sciarra    |          100|부서 100|

    112|Urman      |          100|부서 100|

    113|Popp       |          100|부서 100|

    114|Raphaely   |           30|기타 부서 |

    115|Khoo       |           30|기타 부서 |

0개의 댓글