엑셀 수식을 MySQL에 적용하고자 하는데 검색해봐도 모르겠습니다...
엑셀 함수는 다음과 같습니다.
DATEDIF(J47,TODAY(),"Y")&"년"
DATEDIF(J47,TODAY(),"YM")&"개월"
DATEDIF(J47,TODAY(),"mD")&"일"
기준일에 따른 결과 값
2016-01-01 : 6년 / 8개월 / 13일
2022-08-22 : 0년 / 0개월 / 23일
MySQL 처리 시,
2016-01-01 은 이상이 없는데,
2022-08-22 의 경우에는 0년 / 1개월 / -8일 이 튀어 나와버리네요...
WITH TEMP AS (
SELECT '홍길동' AS NAME, '2016-01-01' AS ENTRY_DATE FROM DUAL
UNION ALL
SELECT '임꺽정' AS NAME, '2022-08-22' AS ENTRY_DATE FROM DUAL
)
SELECT NAME, ENTRY_DATE
, CONCAT(YEAR(NOW()) - YEAR(ENTRY_DATE), '년') AS YEAR_DIFF
, CONCAT(MONTH(NOW()) - MONTH(ENTRY_DATE), '개월') AS MONTH_DIFF
, CONCAT(DAY(NOW()) - DAY(ENTRY_DATE), '일') AS DAY_DIFF
FROM TEMP
엑셀 수식을 MySQL에 어떻게 적용해야 할까요 ㅠㅠ
mysql은 datediff랑 timestampdiff 함수 기능이 있네요.
단위를 지정하신다면 timestampdiff 를 사용하시면 될듯합니다.
mysql> select timestampdiff(day, '2022-08-22', now()); +-----------------------------------------+ | timestampdiff(day, '2022-08-22', now()) | +-----------------------------------------+ | 23 | +-----------------------------------------+ 1 row in set (0.00 sec) mysql> select timestampdiff(month, '2022-08-22', now()); +-------------------------------------------+ | timestampdiff(month, '2022-08-22', now()) | +-------------------------------------------+ | 0 | +-------------------------------------------+ 1 row in set (0.00 sec) mysql> select timestampdiff(year, '2022-08-22', now()); +------------------------------------------+ | timestampdiff(year, '2022-08-22', now()) | +------------------------------------------+ | 0 | +------------------------------------------+ 1 row in set (0.00 sec)
깔끔하지는 않지만 어떤 분이 해결해 주셨습니다.
WITH temp
AS
(
SELECT '홍길동' AS name,
'2016-01-01' AS entry_date
FROM DUAL
UNION ALL
SELECT '임꺽정' AS name,
'2022-08-22' AS entry_date
FROM DUAL
UNION ALL
SELECT '장발장' AS name,
'2018-11-01' AS entry_date
FROM DUAL
)
SELECT name,
entry_date,
timestampdiff(year, str_to_date(entry_date, '%Y-%m-%d'), now()) AS year_diff,
timestampdiff(month, date_add(str_to_date(entry_date, '%Y-%m-%d'), INTERVAL timestampdiff(year, str_to_date(entry_date, '%Y-%m-%d'), now()) year), now()) AS month_diff,
timestampdiff(day, date_add(date_add(str_to_date(entry_date, '%Y-%m-%d'), INTERVAL timestampdiff(year, str_to_date(entry_date, '%Y-%m-%d'), now()) year), INTERVAL timestampdiff(month, date_add(str_to_date(entry_date, '%Y-%m-%d'), INTERVAL timestampdiff(year, str_to_date(entry_date, '%Y-%m-%d'), now()) year), now()) month), now()) AS day_diff
FROM temp;
이보다 깔끔한 방법이 있었으면 좋긴하겠지만 일단 엑셀과 결과 값이 일치하긴 합니다.
WITH temp AS ( SELECT '홍길동' name, '2016-01-01' entry_date UNION ALL SELECT '임꺽정', '2022-08-22' UNION ALL SELECT '장발장', '2018-11-01' ) SELECT name , entry_date , TIMESTAMPDIFF(year , entry_date, NOW()) y , TIMESTAMPDIFF(month, entry_date, NOW()) % 12 m , TIMESTAMPDIFF(day, TIMESTAMPADD(month, TIMESTAMPDIFF(month, entry_date, NOW()), entry_date), NOW()) d FROM temp ;