- 1 1. ã¯ããã«
- 2 2. MySQLã®æ¥ä»åã®æŠèŠ
- 3 3. DATETIMEåãšTIMESTAMPåã®éã
- 4 4. MySQL æ¥ä»é¢æ°ã®åºæ¬
- 5 5. æ¥ä»ã®ãã©ãŒããããšå€ææ¹æ³
- 6 6. æ¥ä»ã®èšç®ãšæ¯èŒ
- 7 7. æ¥ä»ã®ç¯å²æ€çŽ¢
- 8 8. æ¥ä»ã®èªåæŽæ°ãšããã©ã«ãå€ã®èšå®
- 9 9. å®è·µäŸïŒMySQLæ¥ä»ã®æŽ»ç𿹿³
- 10 10. FAQ
- 10.1 ãããã質åãšåç
- 10.1.1 Q1. MySQLã§çŸåšã®æ¥ä»ãååŸããã«ã¯ã©ãããã°è¯ãã§ããïŒ
- 10.1.2 Q2. MySQLã§ç¹å®ã®æ¥ä»åœ¢åŒã«ãã©ãŒãããããã«ã¯ïŒ
- 10.1.3 Q3. TIMESTAMPãšDATETIMEã®éãã¯äœã§ããïŒ
- 10.1.4 Q4. MySQLã§æ¥ä»ãå ç®ã»æžç®ããã«ã¯ã©ãããã°è¯ãã§ããïŒ
- 10.1.5 Q5. MySQLã§2ã€ã®æ¥ä»ã®å·®ãæ¥æ°ã§ååŸããã«ã¯ïŒ
- 10.1.6 Q6. æ¥ä»ã«ã©ã ã®èªåæŽæ°ãèšå®ããã«ã¯ïŒ
- 10.1.7 Q7. éå»30æ¥éã®ããŒã¿ãååŸããã«ã¯ïŒ
- 10.1.8 Q8. MySQLã§ææ¥ãæå®ããŠããŒã¿ãååŸããã«ã¯ïŒ
- 10.2 ãŸãšã
- 10.1 ãããã質åãšåç
- 11 11. ãŸãšã
1. ã¯ããã«
MySQLã¯ãWebã¢ããªã±ãŒã·ã§ã³ãããŒã¿ããŒã¹ã®æ§ç¯ã«ãããŠå€ãå©çšãããããŒã¿ããŒã¹ç®¡çã·ã¹ãã ã§ãããç¹ã«æ¥ä»ããŒã¿ã®æ±ããéèŠã§ããäŸãã°ãããã°æçš¿ãåå販売履æŽã®ç®¡çããŠãŒã¶ãŒã®ãã°ã€ã³å±¥æŽãªã©ãæ¥ä»ããŒã¿ãé¢ããã·ãŒã³ã¯å€å²ã«ããããŸããæ¥ä»ããŒã¿ãé©åã«ç®¡çããããšã§ãå¹ççãªããŒã¿ã®åŠçãå¯èœã«ãªãããŠãŒã¶ãŒã«æ£ç¢ºãªæ å ±ãæäŸã§ããŸãã
ãã®ã¬ã€ãã§ã¯ãMySQLã«ãããæ¥ä»ã®åºæ¬çãªããŒã¿åãæ¥ä»é¢æ°ã®äœ¿ãæ¹ãããæ¥ä»ã掻çšããèšç®ãç¯å²æ€çŽ¢ã®æ¹æ³ãŸã§ãå æ¬çã«è§£èª¬ããŠãããŸããåå¿è ããäžçŽè ãŸã§ã®æ¹ã察象ãšããå®éã«äœ¿çšããå Žé¢ãæ³å®ããå ·äœçãªã¯ãšãªäŸã亀ããªãã説æããŸãã®ã§ãå®åã«ã圹ç«ã€å 容ã§ãã
èšäºãèªã¿é²ããããšã§ã以äžã®ãããªããšãã§ããããã«ãªããŸãã
- MySQLã§æ±ãããæ¥ä»ããŒã¿åã®ç¹åŸŽãçè§£ããããŒã¿ã«å¿ããŠé©åãªåãéžæã§ããããã«ãªãã
- æ¥ä»é¢æ°ã䜿ã£ãŠãçŸåšã®æ¥ä»ãéå»ã®æ¥ä»ãæªæ¥ã®æ¥ä»ãç°¡åã«ååŸã»æäœã§ããã
- æ¥ä»ã®ç¯å²æ€çŽ¢ãæ¯èŒãè¡ãããšã§ãç¹å®ã®æéã«åºã¥ããããŒã¿ã®æœåºãå¯èœã«ãªãã
ã§ã¯ãæ¬¡ç« ããMySQLã®æ¥ä»ã«é¢ããåºæ¬çãªç¥èãèŠãŠãããŸãããã

2. MySQLã®æ¥ä»åã®æŠèŠ
MySQLã§æ¥ä»ã管çããéãããŒã¿ã®å 容ãçšéã«å¿ããŠé©åãªæ¥ä»åãéžæããããšãéèŠã§ããMySQLã«ã¯ãæ¥ä»ãæéãæ±ãããã«è€æ°ã®ããŒã¿åãçšæãããŠãããããããã®ç¹åŸŽãäœ¿ãæ¹ãç°ãªããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãäž»ãªæ¥ä»åãšãã®çšéã«ã€ããŠè©³ãã解説ããŸãã
DATEå
DATE
åã¯ãæ¥ä»ïŒå¹Žãæãæ¥ïŒã®ã¿ãä¿åããããã®ããŒã¿åã§ãæéã¯å«ãŸããŸãããç¯å²ã¯ã1000-01-01ãããã9999-12-31ããŸã§ã§ã西æŠ1000幎ãã9999幎ãŸã§ã®æ¥ä»ãæ±ãããšãã§ããŸããäŸãã°ãèªçæ¥ãèšå¿µæ¥ãªã©ã®æéãèæ
®ããªãæ¥ä»æ
å ±ã«é©ããŠããŸãã
CREATE TABLE users (
id INT,
name VARCHAR(50),
birth_date DATE
);
TIMEå
TIME
åã¯ãæéïŒæãåãç§ïŒãä¿åããããã®ããŒã¿åã§ããç¯å²ã¯ã-838:59:59ãããã838:59:59ããŸã§ã§ãè² ã®æéãæ±ãããããæéã®å·®åã衚çŸããéã«ãå©çšã§ããŸããäŸãã°ãå€åæéãäœæ¥æéã®èšé²ã«äœ¿çšã§ããŸãã
CREATE TABLE work_log (
id INT,
task_name VARCHAR(50),
duration TIME
);
DATETIMEå
DATETIME
åã¯ãæ¥ä»ãšæéã®äž¡æ¹ãä¿åããããŒã¿åã§ãç¯å²ã¯ã1000-01-01 00:00:00ãããã9999-12-31 23:59:59ããŸã§ã§ããã¿ã€ã ãŸãŒã³ã«äŸåãããä¿åããæå»ããã®ãŸãŸååŸã§ããŸããéå»ã®åºæ¥äºã®æ¥æãå°æ¥ã®äºå®ãèšé²ããã®ã«é©ããŠããŸãã
CREATE TABLE appointments (
id INT,
description VARCHAR(50),
appointment_datetime DATETIME
);
TIMESTAMPå
TIMESTAMP
åã¯ãæ¥ä»ãšæéãä¿åãããµãŒããŒã®ã¿ã€ã ãŸãŒã³ã«åŸã£ãŠèªåçã«å€æãããããŒã¿åã§ããç¯å²ã¯ã1970-01-01 00:00:01 UTCãããã2038-01-19 03:14:07 UTCããŸã§ã§ãUnixãšããã¯ã¿ã€ã ãšäºææ§ããããæå»ã®èšé²ã倿Žå±¥æŽã®ä¿åã«é©ããŠããŸãããŸããTIMESTAMP
åã¯ããã©ã«ãã§çŸåšã®æå»ãèšå®ã§ãããããäœææ¥ãæŽæ°æ¥ã®èªåèšé²ã«äŸ¿å©ã§ãã
CREATE TABLE posts (
id INT,
title VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
YEARå
YEAR
åã¯ã幎ã®ã¿ãä¿åããããã®ããŒã¿åã§ããç¯å²ã¯ã1901ãããã2155ããŸã§ã®å¹Žã§ãç¹å®ã®å¹Žã衚ãå Žåã«å©çšããŸãã補é 幎ãèšç«å¹Žãªã©ã幎åäœã§ã®ç®¡çãå¿
èŠãªããŒã¿ã«é©ããŠããŸãã
CREATE TABLE products (
id INT,
name VARCHAR(50),
manufactured_year YEAR
);
忥ä»åã®æ¯èŒãšçšé
ããŒã¿å | ä¿åå 容 | ç¯å² | äž»ãªçšé |
---|---|---|---|
DATE | 幎ãæãæ¥ | 1000-01-01 ïœ 9999-12-31 | èªçæ¥ãèšå¿µæ¥ãªã© |
TIME | æãåãç§ | -838:59:59 ïœ 838:59:59 | å€åæéãäœæ¥æé |
DATETIME | 幎ãæãæ¥ãæãåãç§ | 1000-01-01 00:00:00 ïœ 9999-12-31 23:59:59 | äºå®ãåºæ¥äºã®æ¥æèšé² |
TIMESTAMP | 幎ãæãæ¥ãæãåãç§ | 1970-01-01 00:00:01 UTC ïœ 2038-01-19 03:14:07 UTC | äœææ¥ãæŽæ°æ¥ãèªåèšé² |
YEAR | 幎 | 1901 ïœ 2155 | 補é 幎ãèšç«å¹Ž |
ãŸãšã
MySQLã®æ¥ä»åã¯ãããŒã¿ã®ç¹æ§ã䜿çšç®çã«å¿ããŠéžæããããšã§ãå¹ççãã€å¹æçã«ããŒã¿ã管çã§ããŸããæ¬¡ç« ã§ã¯ããããã®æ¥ä»åã®äžã§ãç¹ã«æ··åããããDATETIME
åãšTIMESTAMP
åã®éãã«ã€ããŠè©³ããèŠãŠãããŸãããã

3. DATETIMEåãšTIMESTAMPåã®éã
MySQLã§æ¥ä»ãšæéãæ±ãéãDATETIME
åãšTIMESTAMP
åã¯ããå©çšãããŸãããäž¡è
ã«ã¯éèŠãªéãããããŸããã©ã¡ãã幎ãæãæ¥ãæãåãç§ãä¿åããããã®ããŒã¿åã§ãããç¹ã«ã¿ã€ã ãŸãŒã³ã®æ±ããä¿åå¯èœãªæéã§å·®ããããçšéã«ãã£ãŠäœ¿ãåããããšãæ±ããããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãDATETIME
åãšTIMESTAMP
åã®éããšãã®ç¹åŸŽã«ã€ããŠè©³ãã解説ããŸãã
DATETIMEåã®ç¹åŸŽ
- ã¿ã€ã ãŸãŒã³ã«äŸåããªãïŒ
DATETIME
åã¯ãä¿åãããå€ããµãŒããŒã®ã¿ã€ã ãŸãŒã³èšå®ã«åœ±é¿ãåããŸããããã®ãããä¿åããæå»ããã®ãŸãŸååŸã§ããŸãã - ç¯å²ïŒ1000-01-01 00:00:00ãã9999-12-31 23:59:59ãŸã§ã®ç¯å²ãæ±ããŸãã
- çšéïŒéå»ã®åºæ¥äºãæªæ¥ã®äºå®ãªã©ãç¹å®ã®ã¿ã€ã ãŸãŒã³ã«äŸåããä¿åãããããŒã¿ã«åããŠããŸãã
䜿çšäŸïŒã€ãã³ãã®é嬿¥æãä¿å
ããšãã°ãäžçå
±éã®æ¥ä»ããã®ãŸãŸä¿æãããå ŽåãDATETIME
åãéžæããã®ãé©ããŠããŸãã以äžã®äŸã§ã¯ãç¹å®ã®æ¥æã«éå¬ãããã€ãã³ããèšé²ããŠããŸãã
CREATE TABLE events (
id INT,
event_name VARCHAR(50),
event_datetime DATETIME
);
ãã®ããŒãã«ã§ã¯ãevent_datetime
åã«ä¿åãããæ¥æã¯ã¿ã€ã ãŸãŒã³ã®åœ±é¿ãåãããä¿åããããŸãŸã®å€ãååŸã§ããŸãã
TIMESTAMPåã®ç¹åŸŽ
- ã¿ã€ã ãŸãŒã³ã«äŸåããïŒ
TIMESTAMP
åã¯ãµãŒããŒã®ã¿ã€ã ãŸãŒã³ã«åºã¥ããŠä¿åã»ååŸãããŸãããã®ãããç°ãªãã¿ã€ã ãŸãŒã³ã®ãµãŒããŒéã§ããŒã¿ãç§»åããéã«ã¯ãã¿ã€ã ãŸãŒã³ã«åããã倿ãè¡ãããŸãã - ç¯å²ïŒ1970-01-01 00:00:01 UTCãã2038-01-19 03:14:07 UTCãŸã§ã®ç¯å²ãæ±ããŸãïŒããã¯Unixæéã®ç¯å²ã«åºã¥ããŠããŸãïŒã
- èªåæŽæ°æ©èœïŒ
TIMESTAMP
åã¯ãDEFAULT CURRENT_TIMESTAMP
ãON UPDATE CURRENT_TIMESTAMP
ãå©çšããŠãããŒã¿ã®æ¿å ¥æãæŽæ°æã«èªåçã«çŸåšã®æå»ãèšé²ããããšãå¯èœã§ãã - çšéïŒããŒã¿ã®äœææ¥æãæŽæ°æ¥æãªã©ãæå»ã倿Žããããã³ã«çŸåšã®æå»ãèšé²ãããå Žåã«é©ããŠããŸãã
䜿çšäŸïŒæçš¿ã®äœææ¥æãšæŽæ°æ¥æãä¿å
TIMESTAMP
åã®èªåæŽæ°æ©èœã掻çšããããã°æçš¿ã®äœææ¥æãšæŽæ°æ¥æãèšé²ããäŸã§ãã
CREATE TABLE blog_posts (
id INT,
title VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
ãã®èšå®ã«ãããæçš¿ãåããŠäœæããããšãã«created_at
åã«ãã®æå»ãèšé²ãããæçš¿ãæŽæ°ããããã³ã«updated_at
åãèªåçã«æŽæ°ãããŸãã
DATETIMEåãšTIMESTAMPåã®æ¯èŒè¡š
ç¹åŸŽ | DATETIMEå | TIMESTAMPå |
---|---|---|
ã¿ã€ã ãŸãŒã³ | ãµãŒããŒã®ã¿ã€ã ãŸãŒã³ã«äŸåããªã | ãµãŒããŒã®ã¿ã€ã ãŸãŒã³ã«äŸåãã |
ç¯å² | 1000-01-01 00:00:00 ïœ 9999-12-31 23:59:59 | 1970-01-01 00:00:01 UTC ïœ 2038-01-19 03:14:07 UTC |
èªåæŽæ°æ©èœ | ãªã | DEFAULT CURRENT_TIMESTAMP çã§å¯Ÿå¿å¯èœ |
äž»ãªçšé | åºå®ããæå»ãèšé²ãããå Žå | äœææ¥æãæŽæ°æ¥æãªã©ã®èªåèšé²ãå¿ èŠãªå Žå |
éžæã®ãã€ã³ã
- ã¿ã€ã ãŸãŒã³ã®åœ±é¿ãåããããªãå Žåã¯DATETIMEåãéžæããïŒäŸãã°ãç¹å®ã®åœãå°åã®ã¿ã€ã ãŸãŒã³ãæå®ããã€ãã³ãæ¥æãä¿åããå Žåã¯
DATETIME
åãé©ããŠããŸãã - èªåæŽæ°ãã¿ã€ã ãŸãŒã³ã«å¯Ÿå¿ãããå Žåã¯TIMESTAMPåãéžæããïŒäŸãã°ãããŒã¿ããŒã¹ã®ããŒã¿ããã€æŽæ°ãããããèªåçã«èšé²ãããå Žåã
TIMESTAMP
åã䟿å©ã§ãã
ãŸãšã
DATETIME
åãšTIMESTAMP
åã¯ãããããç°ãªãç¹åŸŽãæã¡ãçšéã«å¿ããŠäœ¿ãåããããšã§å¹ççã«ããŒã¿ã管çã§ããŸããæ¬¡ç« ã§ã¯ãMySQLã®æ¥ä»æäœã«æ¬ ãããªãåºæ¬çãªæ¥ä»é¢æ°ã«ã€ããŠè©³ããèŠãŠãããŸãããã

4. MySQL æ¥ä»é¢æ°ã®åºæ¬
MySQLã§ã¯ãæ¥ä»ãæéã«é¢ããæäœãè¡ãããã«ãããŸããŸãªé¢æ°ãçšæãããŠããŸããçŸåšã®æ¥ä»ãæå»ãååŸãããã®ãããæ¥ä»ã®å ç®ã»æžç®ãè¡ããã®ãŸã§ãããŒã¿ããŒã¹ã®ç®¡çãåæã«äŸ¿å©ãªé¢æ°ãå€ãååšããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãMySQLã®æ¥ä»é¢æ°ã®åºæ¬çãªäœ¿ãæ¹ãšãããããã®çšéã«ã€ããŠè§£èª¬ããŸãã
çŸåšã®æ¥ä»ã»æå»ãååŸãã颿°
MySQLã§çŸåšã®æ¥æãååŸããå Žåã«äœ¿çšãã代衚çãªé¢æ°ã«ã¯ãNOW()
ãCURDATE()
ãCURTIME()
ã®3ã€ããããŸãã
NOW()
NOW()
颿°ã¯ãçŸåšã®æ¥ä»ãšæå»ããYYYY-MM-DD HH:MM:SSãã®åœ¢åŒã§è¿ããŸããæ¥æã®èšé²ããã°ã®äœæã«äŸ¿å©ã§ãã
SELECT NOW(); -- çŸåšã®æ¥æãååŸ
CURDATE()
CURDATE()
颿°ã¯ãçŸåšã®æ¥ä»ããYYYY-MM-DDãã®åœ¢åŒã§è¿ããŸããæéã¯å«ãŸããªããããæ¥ä»ã®ã¿ã管çãããå Žåã«é©ããŠããŸãã
SELECT CURDATE(); -- çŸåšã®æ¥ä»ãååŸ
CURTIME()
CURTIME()
颿°ã¯ãçŸåšã®æå»ããHH:MM:SSãã®åœ¢åŒã§è¿ããŸããæ¥ä»ãå«ãããæéã ããå¿
èŠãšããå Žåã«å©çšããŸãã
SELECT CURTIME(); -- çŸåšã®æå»ãååŸ
æ¥ä»ã®å ç®ã»æžç®ãè¡ã颿°
æ¥ä»ã«å¯ŸããŠç¹å®ã®æéãå ç®ã»æžç®ãããå ŽåãDATE_ADD()
ãšDATE_SUB()
颿°ã䜿çšããŸããããã«ãããæªæ¥ãŸãã¯éå»ã®æ¥ä»ãç°¡åã«èšç®ã§ããŸãã
DATE_ADD()
DATE_ADD()
颿°ã¯ãæå®ããæéãæ¥ä»ã«å ç®ããŸããäŸãã°ã7æ¥åŸã1ã¶æåŸã®æ¥ä»ãååŸããå Žåã«äŸ¿å©ã§ãã
SELECT DATE_ADD('2023-01-01', INTERVAL 7 DAY); -- 2023-01-08ãè¿ã
DATE_SUB()
DATE_SUB()
颿°ã¯ãæå®ããæéãæ¥ä»ããæžç®ããŸããéå»ã®æ¥ä»ãèšç®ããéã«äœ¿çšããŸãã
SELECT DATE_SUB('2023-01-01', INTERVAL 1 MONTH); -- 2022-12-01ãè¿ã
æ¥ä»ã®å·®åãèšç®ãã颿°
2ã€ã®æ¥ä»ã®å·®ãèšç®ãããå Žåã¯ãDATEDIFF()
颿°ã䟿å©ã§ããäŸãã°ãããç¹å®ã®æ¥ä»ããçŸåšãŸã§ã®æ¥æ°ãèšç®ãããã2ã€ã®ç°ãªãæ¥ä»ã®éã®æ¥æ°ã調ã¹ããã§ããŸãã
DATEDIFF()
DATEDIFF()
颿°ã¯ã2ã€ã®æ¥ä»ã®å·®ãæ¥æ°ã§è¿ããŸããéå§æ¥ããçµäºæ¥ãŸã§ã®æ¥æ°ã確èªããå Žåã«äŸ¿å©ã§ãã
SELECT DATEDIFF('2023-01-10', '2023-01-01'); -- 9ãè¿ã
æ¥ä»ã®æäœã«äŸ¿å©ãªä»ã®é¢æ°
MySQLã«ã¯ãä»ã«ãæ¥ä»ã«é¢ãã䟿å©ãªé¢æ°ãããã€ããããŸãã
EXTRACT()
EXTRACT()
颿°ã¯ãæ¥ä»ããç¹å®ã®éšåïŒå¹Žãæãæ¥ãªã©ïŒãæœåºããŸããæ¥ä»ããŒã¿ã®äžéšã®ã¿ãååŸãããå Žåã«åœ¹ç«ã¡ãŸãã
SELECT EXTRACT(YEAR FROM '2023-01-01'); -- å¹ŽãæœåºïŒ2023ïŒ
SELECT EXTRACT(MONTH FROM '2023-01-01'); -- æãæœåºïŒ1ïŒ
SELECT EXTRACT(DAY FROM '2023-01-01'); -- æ¥ãæœåºïŒ1ïŒ
DATE_FORMAT()
DATE_FORMAT()
颿°ã¯ãæ¥ä»ãæå®ãããã©ãŒãããã§è¡šç€ºããŸããæ¥ä»ãæ¥æ¬ã®åœ¢åŒïŒYYYY幎MMæDDæ¥ãªã©ïŒã§è¡šç€ºãããå Žåãªã©ã«äœ¿çšããŸãã
SELECT DATE_FORMAT('2023-01-01', '%Y幎%mæ%dæ¥'); -- 2023幎01æ01æ¥ãè¿ã
ãŸãšã
MySQLã®æ¥ä»é¢æ°ã¯ãçŸåšã®æ¥æã®ååŸãæ¥ä»ã®å ç®ã»æžç®ãå·®åèšç®ãéšåæœåºãªã©ãå¹ åºãæäœãå¯èœã«ããŸããæ¥ä»ã®æäœã¯ããŒã¿åæã管çã«æ¬ ãããªãèŠçŽ ã§ããããããã®é¢æ°ã掻çšããããšã§ãå¹ççã«ããŒã¿ã管çã§ããŸããæ¬¡ç« ã§ã¯ãæ¥ä»ãã©ãŒããããšå€ææ¹æ³ã«ã€ããŠããã«è©³ãã解説ããŠãããŸãã

5. æ¥ä»ã®ãã©ãŒããããšå€ææ¹æ³
MySQLã§ã¯ãããŒã¿ã衚瀺ããéã«èŠããããã©ãŒãããã«å€æŽããããæåå圢åŒã®æ¥ä»ããŒã¿ãæ¥ä»åã«å€æãããããããšãå¯èœã§ããããã«ããã衚瀺ãããã©ãŒããããæè»ã«èšå®ããããç°ãªã圢åŒã®ããŒã¿ãäžè²«ããŠç®¡çã§ããããã«ãªããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãæ¥ä»ã®ãã©ãŒããããšå€æã«äœ¿çšããäž»èŠãªé¢æ°ã«ã€ããŠèª¬æããŸãã
DATE_FORMAT()颿°ã§ã®æ¥ä»ãã©ãŒããã
DATE_FORMAT()
颿°ã䜿çšãããšãæ¥ä»ããŒã¿ãæå®ãããã©ãŒãããã§è¡šç€ºã§ããŸããç¹ã«ãæ¥æ¬ã®ãYYYY幎MMæDDæ¥ã圢åŒãªã©ãæšæºåœ¢åŒä»¥å€ã®è¡šç€ºãå¿
èŠãªå Žåã«åœ¹ç«ã¡ãŸãã
ãã©ãŒããããªãã·ã§ã³
DATE_FORMAT()
ã§ã¯ã以äžã®ãããªãã©ãŒããããªãã·ã§ã³ã䜿çšã§ããŸãã
%Y
ïŒ4æ¡ã®å¹Ž%y
ïŒ2æ¡ã®å¹Ž%m
ïŒ2æ¡ã®æïŒ01ã12ïŒ%d
ïŒ2æ¡ã®æ¥ïŒ01ã31ïŒ%H
ïŒ2æ¡ã®æïŒ00ã23ïŒ%i
ïŒ2æ¡ã®åïŒ00ã59ïŒ%s
ïŒ2æ¡ã®ç§ïŒ00ã59ïŒ
䜿çšäŸ
äŸãã°ã2023-01-01
ãšããæ¥ä»ãã2023幎01æ01æ¥ããšããŠè¡šç€ºãããå Žåã¯ã以äžã®ããã«ããŸãã
SELECT DATE_FORMAT('2023-01-01', '%Y幎%mæ%dæ¥'); -- 2023幎01æ01æ¥ãè¿ã
ãŸããã2023/01/01 12:30:45ãã®ããã«ãã¹ã©ãã·ã¥åºåãã§æ¥æã衚瀺ããããšãå¯èœã§ãã
SELECT DATE_FORMAT('2023-01-01 12:30:45', '%Y/%m/%d %H:%i:%s'); -- 2023/01/01 12:30:45ãè¿ã
STR_TO_DATE()颿°ã§ã®æååããæ¥ä»ãžã®å€æ
STR_TO_DATE()
颿°ã¯ãæåå圢åŒã®æ¥ä»ããŒã¿ãæ¥ä»åã«å€æããããã®é¢æ°ã§ããäŸãã°ãã2023幎01æ01æ¥ããšããæååãDATE
åãšããŠæ±ãããå Žåã«åœ¹ç«ã¡ãŸãã
䜿çšäŸ
æååã2023-01-01ããDATE
åã«å€æããå Žåãæ¬¡ã®ããã«èšè¿°ããŸãã
SELECT STR_TO_DATE('2023-01-01', '%Y-%m-%d'); -- 2023-01-01ãDATEåã§è¿ã
ãŸããæ¥æ¬èªè¡šèšã®æååã2023幎01æ01æ¥ããæ¥ä»ãšããŠå€æããå Žåãã察å¿ãããã©ãŒããããæå®ããŸãã
SELECT STR_TO_DATE('2023幎01æ01æ¥', '%Y幎%mæ%dæ¥'); -- 2023-01-01ãDATEåã§è¿ã
ç°ãªããã©ãŒãããã§ã®æ¥ä»å€æã®äŸ
å®åã§ã¯ãæ¥ä»ã®å ¥å圢åŒãç°ãªãå Žåããããããç°ãªããã©ãŒãããããã®å€æãå¿ èŠã«ãªãããšããããŸãã以äžã«ãããã€ãã®äŸã瀺ããŸãã
- ãYYYY/MM/DDã圢åŒãã
DATE
åãžã®å€æ
SELECT STR_TO_DATE('2023/01/01', '%Y/%m/%d'); -- 2023-01-01ãDATEåã§è¿ã
- ãMM-DD-YYYYã圢åŒãã
DATE
åãžã®å€æ
SELECT STR_TO_DATE('01-01-2023', '%m-%d-%Y'); -- 2023-01-01ãDATEåã§è¿ã
ããã«ãããããŒã¿ãç°ãªã圢åŒã§å ¥åãããŠããäžè²«ããæ¥ä»åœ¢åŒã§ä¿åããã³ç®¡çã§ããŸãã
DATE_FORMATãšSTR_TO_DATEã®éããšäœ¿ãåã
- DATE_FORMAT()ïŒæ¢åã®æ¥ä»ããŒã¿ã®è¡šç€ºåœ¢åŒã倿Žããããã«äœ¿çšããã©ãŒãããã®å€æŽã¯è¡šç€ºäžã®ã¿ã®å¹æããããããä¿åãããŠããããŒã¿èªäœã¯å€æŽãããŸããã
- STR_TO_DATE()ïŒæåå圢åŒã®æ¥ä»ããŒã¿ããMySQLã®
DATE
åãDATETIME
åã«å€æããããã«äœ¿çšãä¿åãããããŒã¿åã倿ŽãããMySQLã®ä»ã®é¢æ°ãã¯ãšãªã§ã®æ¥ä»åŠçã容æã«ãªããŸãã
ãŸãšã
DATE_FORMAT()
ãšSTR_TO_DATE()
ãæŽ»çšããããšã§ãæ¥ä»ããŒã¿ã®è¡šç€ºãä¿å圢åŒãæè»ã«ç®¡çããããšãã§ããŸããããã«ããããŠãŒã¶ãŒãã·ã¹ãã ããã®å
¥åã«å¯ŸããŠãæè»ã«å¯Ÿå¿ããäžè²«ããæ¥ä»ç®¡çãå¯èœã§ããæ¬¡ç« ã§ã¯ãæ¥ä»ã®èšç®ãšæ¯èŒã«ã€ããŠè§£èª¬ããæ¥ä»ããŒã¿ã䜿ã£ãæéã®èšç®ãæ¯èŒã®æ¹æ³ã詳ããèŠãŠãããŸãã

6. æ¥ä»ã®èšç®ãšæ¯èŒ
MySQLã«ã¯ãæ¥ä»ã®èšç®ãæ¯èŒãè¡ãããã®äŸ¿å©ãªé¢æ°ãããã€ãçšæãããŠããŸããããã«ãããç¹å®ã®æéã®ããŒã¿ãæœåºããããæ¥ä»ã®å·®åãèšç®ããŠåæã«æŽ»çšããããšãå¯èœã§ãããã®ã»ã¯ã·ã§ã³ã§ã¯ãæ¥ä»ã®èšç®ãšæ¯èŒã«äœ¿çšããäž»ãªé¢æ°ãšããã®äœ¿ãæ¹ã玹ä»ããŸãã
æ¥ä»ã®å·®åãèšç®ãã颿°ïŒDATEDIFF()
DATEDIFF()
颿°ã¯ã2ã€ã®æ¥ä»ã®å·®ããæ¥æ°ãã§è¿ããŸããç¹å®ã®æ¥ä»éã®çµéæ¥æ°ããéå»ã®ã€ãã³ãããçŸåšãŸã§ã®çµéæ¥æ°ã確èªãããå Žåã«åœ¹ç«ã¡ãŸãã
䜿çšäŸ
äŸãã°ã2023幎1æ1æ¥ãã2023幎1æ10æ¥ãŸã§ã®æ¥æ°ãèšç®ããå Žåã¯ã次ã®ããã«èšè¿°ããŸãã
SELECT DATEDIFF('2023-01-10', '2023-01-01'); -- 9ãè¿ã
ãã®äŸã§ã¯ãéå§æ¥ããçµäºæ¥ãŸã§ã®å·®ãã9æ¥ãã§ãããããçµæãšããŠã9ããè¿ãããŸãã
TIMESTAMPDIFF()ã§ã®æéåäœã®å·®åèšç®
TIMESTAMPDIFF()
颿°ã¯ãæå®ããåäœïŒå¹Žãæãæ¥ãæéãåãç§ïŒã§2ã€ã®æ¥ä»ãŸãã¯æ¥æã®å·®åãèšç®ããŸããäŸãã°ãããæéã®ãæãåäœã§ã®å·®ãããæéãåäœã§ã®å·®ãæ±ããããšãå¯èœã§ãã
䜿çšäŸ
- æåäœã®å·®åãèšç®
SELECT TIMESTAMPDIFF(MONTH, '2022-01-01', '2023-01-01'); -- 12ãè¿ã
- æéåäœã®å·®åãèšç®
SELECT TIMESTAMPDIFF(HOUR, '2023-01-01 00:00:00', '2023-01-02 12:00:00'); -- 36ãè¿ã
æ¥ä»ã®æ¯èŒ
æ¥ä»ã®æ¯èŒã¯ãMySQLã®éåžžã®æ¯èŒæŒç®åïŒ<
ã>
ã<=
ã>=
ã=
ïŒã䜿ã£ãŠè¡ããŸããããã«ãããç¹å®ã®æéå
ã®ããŒã¿ãæœåºããããéå»ã»æªæ¥ã®æ¥ä»ãæ¡ä»¶ã«å«ãããããããšãã§ããŸãã
䜿çšäŸ
äŸãã°ãã2023幎1æ1æ¥ä»¥éãã®ããŒã¿ãæœåºãããå Žåãæ¬¡ã®ããã«èšè¿°ããŸãã
SELECT * FROM events WHERE event_date >= '2023-01-01';
BETWEENã䜿ã£ãç¯å²æå®
BETWEEN
æŒç®åã䜿ããšãæ¥ä»ã®ç¯å²ãæå®ããŠããŒã¿ãååŸããããšãã§ããŸããäŸãã°ãç¹å®ã®æéã«è©²åœããããŒã¿ãæœåºãããå Žåã«äŸ¿å©ã§ãã
䜿çšäŸ
äŸãã°ã2023幎1æ1æ¥ãã2023幎1æ31æ¥ãŸã§ã®ããŒã¿ãååŸããå Žåã¯ã次ã®ããã«èšè¿°ããŸãã
SELECT * FROM events WHERE event_date BETWEEN '2023-01-01' AND '2023-01-31';
ADDDATE()ãšSUBDATE()ã§ã®æ¥ä»èšç®
ADDDATE()
ãšSUBDATE()
颿°ã䜿çšããããšã§ãç¹å®ã®æ¥ä»ã«æ¥æ°ãå ç®ãããæžç®ãããããããšãã§ããŸããå°æ¥ã®æ¥ä»ãéå»ã®æ¥ä»ãèšç®ããéã«äŸ¿å©ã§ãã
䜿çšäŸ
- æ¥ä»ã«10æ¥ãå ç®
SELECT ADDDATE('2023-01-01', 10); -- 2023-01-11ãè¿ã
- æ¥ä»ãã10æ¥ãæžç®
SELECT SUBDATE('2023-01-01', 10); -- 2022-12-22ãè¿ã
ãŸãšã
MySQLã®æ¥ä»èšç®ã»æ¯èŒæ©èœã掻çšããããšã§ãç¹å®ã®æéã«é¢é£ããããŒã¿ã®æœåºããæéããšã®ããŒã¿åæãå¹ççã«è¡ããŸããæ¬¡ç« ã§ã¯ãããã«å¿çšçãªãæ¥ä»ã®ç¯å²æ€çŽ¢ãã«ã€ããŠè©³ãã解説ããŠãããŸãã

7. æ¥ä»ã®ç¯å²æ€çŽ¢
MySQLã§ã¯ãç¹å®ã®æéå ã«è©²åœããããŒã¿ãæ€çŽ¢ããããšãé »ç¹ã«æ±ããããŸããæ¥ä»ã®ç¯å²æ€çŽ¢ãå¹ççã«è¡ãããšã§ãäŸãã°ãç¹å®ã®æã«å®æœãããã€ãã³ããããéå»1é±éã®ããŒã¿ããªã©ãè©³çŽ°ãªæ¡ä»¶ã«åºã¥ããããŒã¿ã®æœåºãå¯èœã§ãããã®ã»ã¯ã·ã§ã³ã§ã¯ãMySQLã§ã®æ¥ä»ã®ç¯å²æ€çŽ¢ã«åœ¹ç«ã€ãã¯ããã¯ãšå ·äœçãªã¯ãšãªäŸã解説ããŸãã
åºæ¬çãªç¯å²æ€çŽ¢ïŒBETWEENå¥
BETWEEN
å¥ã¯ãæå®ããç¯å²å
ã®æ¥ä»ããŒã¿ãååŸããã®ã«äŸ¿å©ã§ããBETWEEN
å¥ã䜿çšããããšã§ãæå®ããæ¥ä»ã®éå§æ¥ããçµäºæ¥ãŸã§ã®ããŒã¿ãç°¡åã«æœåºã§ããŸãã
䜿çšäŸ
äŸãã°ã2023幎1æ1æ¥ãã2023幎1æ31æ¥ãŸã§ã®ããŒã¿ãååŸããã«ã¯ã次ã®ããã«èšè¿°ããŸãã
SELECT * FROM events WHERE event_date BETWEEN '2023-01-01' AND '2023-01-31';
ãã®ã¯ãšãªã§ã¯ãevent_date
ã2023幎1æ1æ¥ãã2023幎1æ31æ¥ã®éã«è©²åœããããŒã¿ããã¹ãŠååŸãããŸãã
æ¯èŒæŒç®åã䜿ã£ãç¯å²æ€çŽ¢
BETWEEN
å¥ã®ä»£ããã«ã>=
ã<=
ãªã©ã®æ¯èŒæŒç®åãçšããŠç¯å²æ€çŽ¢ãè¡ãããšãã§ããŸãããã®æ¹æ³ã§ã¯ãéå§æ¥ãçµäºæ¥ãæè»ã«èšå®ã§ããããè©³çŽ°ãªæ¡ä»¶ãæå®ããããšãå¯èœã§ãã
䜿çšäŸ
äŸãã°ã2023幎1æ1æ¥ä»¥éã®ããŒã¿ã®ã¿ãååŸããå Žåã¯ã次ã®ããã«èšè¿°ããŸãã
SELECT * FROM events WHERE event_date >= '2023-01-01';
ãŸãã2023幎1æ1æ¥ãã2023幎1æ31æ¥ãŸã§ã®æ¥ä»ã«è©²åœããããŒã¿ãååŸããå Žåã¯ã以äžã®ããã«ããŸãã
SELECT * FROM events WHERE event_date >= '2023-01-01' AND event_date <= '2023-01-31';
åçãªæ¥ä»ç¯å²ã®æå®
åçãªæ¥ä»ç¯å²ã®æå®ã¯ãç¹å®ã®æ¥ä»ããäžå®æéååŸã®ããŒã¿ãååŸãããå Žåã«åœ¹ç«ã¡ãŸããäŸãã°ããéå»30æ¥éã®ããŒã¿ãããçŽè¿ã®1é±éåã®ããŒã¿ããåçã«ååŸãããå Žåã«äŸ¿å©ã§ãã
䜿çšäŸïŒéå»30æ¥éã®ããŒã¿ãååŸ
CURDATE()
颿°ã䜿çšããŠãçŸåšã®æ¥ä»ãåºæºã«éå»30æ¥éã®ããŒã¿ãååŸããŸãã
SELECT * FROM events WHERE event_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY);
ãã®ã¯ãšãªã§ã¯ãCURDATE()
ãã30æ¥ãæžç®ããæ¥ä»ä»¥éã®ããŒã¿ãååŸã§ããŸãã
䜿çšäŸïŒæªæ¥ã®ç¹å®ã®æéã®ããŒã¿ãååŸ
å°æ¥ã®æ¥ä»ã«åºã¥ããç¯å²æ€çŽ¢ãå¯èœã§ããäŸãã°ã仿¥ãã1ã¶æå ãŸã§ã®äºå®ãååŸããå Žåã¯ã以äžã®ããã«èšè¿°ããŸãã
SELECT * FROM events WHERE event_date BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 MONTH);
宿çãªããŒã¿ã®ååŸ
ç¹å®ã®ææ¥ãæã«åºã¥ããããŒã¿ãååŸãããå ŽåãWEEKDAY()
ãMONTH()
颿°ãçµã¿åãããŠæ¡ä»¶ãæå®ããããšã§ãææ¥ãæã«åºã¥ããããŒã¿æœåºãå¯èœã§ãã
䜿çšäŸïŒæ¯æã®ç¹å®ã®æ¥ã®ããŒã¿ãååŸ
äŸãã°ãæ¯æã®1æ¥ã®ããŒã¿ã®ã¿ãååŸããã«ã¯ãDAY()
颿°ã䜿çšããŠæ¬¡ã®ããã«èšè¿°ããŸãã
SELECT * FROM events WHERE DAY(event_date) = 1;
䜿çšäŸïŒç¹å®ã®ææ¥ã®ããŒã¿ãååŸ
WEEKDAY()
颿°ã䜿çšããŠãç¹å®ã®ææ¥ã«è©²åœããããŒã¿ãååŸããããšãå¯èœã§ããäŸãã°ãæ¯é±æææ¥ã®ããŒã¿ãååŸããã«ã¯æ¬¡ã®ããã«èšè¿°ããŸãã
SELECT * FROM events WHERE WEEKDAY(event_date) = 0; -- æææ¥ã¯0ãç«ææ¥ã¯1ãšç¶ã
ç¯å²æ€çŽ¢ã®ããã©ãŒãã³ã¹åäž
ç¯å²æ€çŽ¢ã¯ãããŒã¿éãå€ãå Žåãã¯ãšãªã®å®è¡é床ãé ããªãå¯èœæ§ããããŸããããã©ãŒãã³ã¹ãåäžãããããã«ãæ¥ä»ã«ã©ã ã«ã€ã³ããã¯ã¹ãèšå®ããããšãæšå¥šããŸãã
䜿çšäŸïŒã€ã³ããã¯ã¹ã®äœæ
äŸãã°ãevent_date
ã«ã©ã ã«ã€ã³ããã¯ã¹ã远å ããããšã§ãç¯å²æ€çŽ¢ã®ããã©ãŒãã³ã¹ãåäžããŸãã
CREATE INDEX idx_event_date ON events(event_date);
ã€ã³ããã¯ã¹ãäœæããããšã§ãããŒã¿ããŒã¹ã¯æ¥ä»ã®ç¯å²æ€çŽ¢ãå¹ççã«åŠçã§ããã¯ãšãªã®å®è¡éåºŠãæ¹åãããŸãã
ãŸãšã
MySQLã®æ¥ä»ç¯å²æ€çŽ¢ã¯ãBETWEEN
å¥ãæ¯èŒæŒç®åãæŽ»çšããããšã§å¹ççã«å®è¡ã§ããŸãããŸããåçãªæ¥ä»ç¯å²ã®èšå®ãææ¥æå®ãå¯èœã§ãããããŸããŸãªæ¡ä»¶ã§ããŒã¿ãååŸã§ããæè»ãªæ€çŽ¢ãå¯èœã§ããæ¬¡ç« ã§ã¯ãæ¥ä»ã®èªåæŽæ°ãšããã©ã«ãå€ã®èšå®ã«ã€ããŠè§£èª¬ããŸãã

8. æ¥ä»ã®èªåæŽæ°ãšããã©ã«ãå€ã®èšå®
MySQLã§ã¯ãã¬ã³ãŒãã®äœææ¥æãæŽæ°æ¥æãèªåã§èšé²ããããã®äŸ¿å©ãªæ©èœãæäŸãããŠããŸããç¹ã«ãTIMESTAMP
åãDATETIME
åã®æ¥ä»ãã£ãŒã«ãã«å¯Ÿããããã©ã«ãå€ãšããŠçŸåšã®æå»ãèšå®ããããã¬ã³ãŒããæŽæ°ããããã³ã«èªåçã«æå»ãæŽæ°ããèšå®ãå¯èœã§ããããã«ãããäœææ¥æãæçµæŽæ°æ¥æãèªåã§èšé²ã§ããããŒã¿ç®¡çãå¹çåãããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãMySQLã®æ¥ä»ã®èªåæŽæ°ãšããã©ã«ãå€ã®èšå®æ¹æ³ã«ã€ããŠè§£èª¬ããŸãã
èªåçã«çŸåšã®æå»ãèšå®ãã
MySQLã§ã¯ãTIMESTAMP
ãDATETIME
ã«ã©ã ã«ããã©ã«ãã§çŸåšã®æå»ãèšå®ããããšãå¯èœã§ããæ°ããã¬ã³ãŒãã远å ãããéã«ãã«ã©ã ã«å€ãæå®ãããŠããªãå Žåãèªåçã«çŸåšã®æå»ãæ¿å
¥ãããŸãã
䜿çšäŸïŒäœææ¥æã®èªåèšå®
äŸãã°ãcreated_at
ã«ã©ã ã«ã¬ã³ãŒãäœææã®æå»ãèªåã§èšé²ãããå Žåãæ¬¡ã®ããã«èšå®ããŸãã
CREATE TABLE blog_posts (
id INT PRIMARY KEY,
title VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ãã®èšå®ã§ã¯ãæ°ããã¬ã³ãŒãã远å ããããã³ã«ãcreated_at
ã«ã©ã ã«ãã®æç¹ã®æå»ãèªåçã«æ¿å
¥ãããŸãã
èªåæŽæ°ã®èšå®ïŒON UPDATE CURRENT_TIMESTAMP
MySQLã§ã¯ãã«ã©ã ã®å€ãæŽæ°ããããã³ã«æå»ãèªåæŽæ°ããèšå®ãå¯èœã§ããããã«ãããããŒã¿ã®æçµæŽæ°æ¥æãèªåã§èšé²ã§ããŸãã
䜿çšäŸïŒæŽæ°æ¥æã®èªåèšå®
äŸãã°ãupdated_at
ã«ã©ã ã«ã¬ã³ãŒããæŽæ°ããããã³ã«çŸåšã®æå»ãèªåã§èšé²ãããå Žåãæ¬¡ã®ããã«èšå®ããŸãã
CREATE TABLE blog_posts (
id INT PRIMARY KEY,
title VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
ãã®èšå®ã§ã¯ãæ°ããã¬ã³ãŒããäœæãããéã«created_at
ãšupdated_at
ã®äž¡æ¹ã«çŸåšã®æå»ãæ¿å
¥ããããã®åŸã¬ã³ãŒããæŽæ°ããããã³ã«updated_at
ã«ã©ã ãçŸåšã®æå»ã§èªåæŽæ°ãããŸãã
DATETIMEåã§ã®èªåæŽæ°ã®èšå®
MySQLã®ããŒãžã§ã³5.6以éã§ã¯ãDATETIME
åã«ãDEFAULT CURRENT_TIMESTAMP
ãON UPDATE CURRENT_TIMESTAMP
ã䜿çšã§ããããã«ãªã£ãŠããŸãããã ããDATETIME
åã§ã¯èªåæŽæ°ã®èšå®ã1ã€ã®ã«ã©ã ã«ããé©çšã§ããªããããè€æ°ã®èªåæŽæ°ã«ã©ã ãå¿
èŠãšããå Žåã¯TIMESTAMP
åãå©çšããæ¹ãé©ããŠããŸãã
䜿çšäŸïŒDATETIMEåã®èªåèšå®
CREATE TABLE blog_entries (
id INT PRIMARY KEY,
title VARCHAR(100),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
ãã®äŸã§ã¯ãcreated_at
ã«ã¬ã³ãŒãã®äœææå»ãèªåã§èšå®ãããŸãããTIMESTAMP
åã®ãããªèªåæŽæ°æ©èœã¯ãããŸããã
èªåæŽæ°ãšããã©ã«ãå€ã®æŽ»çšäŸ
æ¥ä»ã®èªåèšå®æ©èœã¯ãäœææ¥æãæŽæ°æ¥æã管çããéã«ç¹ã«äŸ¿å©ã§ããããã°èšäºã®æçš¿æ¥æããŠãŒã¶ãŒã®æçµãã°ã€ã³æ¥æã泚æã®æŽæ°æ¥æãªã©ãããŒã¿ããã€äœæã»å€æŽããããã远跡ããçšéã§ãã䜿çšãããŸãã
䜿çšäŸïŒãŠãŒã¶ãŒã®æçµãã°ã€ã³æ¥æ
äŸãã°ããŠãŒã¶ãŒã®æçµãã°ã€ã³æ¥æã管çããããŒãã«ãèšèšããå Žåãlast_login
ã«ã©ã ã«èªåã§æå»ãæŽæ°ãããããã«èšå®ããŸãã
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50),
last_login TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
ãã®èšå®ã«ããããŠãŒã¶ãŒããã°ã€ã³ãããã³ã«last_login
ãæŽæ°ãããææ°ã®ãã°ã€ã³æ¥æãèªåã§èšé²ãããŸãã
泚æç¹
- è€æ°ã®èªåæŽæ°ãã£ãŒã«ãïŒMySQLã§ã¯ã1ã€ã®ããŒãã«ã«è€æ°ã®èªåæŽæ°ãã£ãŒã«ããæãããå Žåã
TIMESTAMP
åã®ã«ã©ã ã§ã®ã¿å¯èœã§ããDATETIME
åã§ã¯èªåæŽæ°ã®èšå®ãè€æ°ã®ã«ã©ã ã«é©çšã§ããŸããã - ããŒãžã§ã³äŸåïŒ
DATETIME
åã®èªåæŽæ°ã¯ãMySQL 5.6以éã§ãµããŒããããŠãããããããŒãžã§ã³ã«äŸåããæ©èœã§ãã䜿çšããéã«ã¯MySQLã®ããŒãžã§ã³ã確èªããŸãããã
ãŸãšã
MySQLã®æ¥ä»ã®èªåæŽæ°ãšããã©ã«ãå€ã®èšå®ã掻çšããããšã§ãäœææ¥æãæŽæ°æ¥æãå¹ççã«ç®¡çã§ããŸããTIMESTAMP
åãDATETIME
åã®ç¹åŸŽãçè§£ããé©åãªããŒã¿åãšèšå®ãéžæããããšã§ãããŒã¿ç®¡çãç°¡ç¥åã§ããã§ããããæ¬¡ç« ã§ã¯ãå®éã®ã·ããªãªã«åºã¥ããæ¥ä»æäœã®å
·äœçãªäŸãèŠãŠãããŸãã

9. å®è·µäŸïŒMySQLæ¥ä»ã®æŽ»ç𿹿³
MySQLã®æ¥ä»æäœã¯ãå®åã«ãããŠããŸããŸãªã·ããªãªã§å©çšãããŸããäŸãã°ãæå®ããæéã®ããŒã¿ãéèšããããéå»ã®ããŒã¿ãåæããããã«æ¥ä»ã䜿çšããããšããããããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãå®éã®ããžãã¹ã·ãŒã³ãæ³å®ããæ¥ä»æäœã®å ·äœäŸãããã€ã玹ä»ããŸããããã«ãããMySQLã®æ¥ä»æäœãã©ã®ããã«æŽ»çšã§ããããçè§£ããå®åã§ã®å¿çšããããããªãã§ãããã
éå»30æ¥éã®ããŒã¿ãååŸ
éå»30æ¥éã®ããŒã¿ãæœåºããã®ã¯ãã¢ã¯ã»ã¹ãã°ã販売ããŒã¿ã®åæãªã©ã§ããæ±ããããæäœã§ããããã§ã¯ãçŸåšã®æ¥ä»ãåºæºã«ããŠãéå»30æ¥éã«çºçããããŒã¿ãååŸããã¯ãšãªã玹ä»ããŸãã
䜿çšäŸïŒã¢ã¯ã»ã¹ãã°ã®æœåº
SELECT * FROM access_logs WHERE log_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY);
ãã®ã¯ãšãªã§ã¯ãlog_date
ãçŸåšã®æ¥ä»ïŒCURDATE()
ïŒãã30æ¥ä»¥å
ã«è©²åœããããŒã¿ãæœåºããŸããäŸãã°ãçŽè¿ã®ã¢ã¯ã»ã¹åŸåãåæããéã«åœ¹ç«ã¡ãŸãã
ç¹å®ã®æã®å£²äžããŒã¿ãéèš
ç¹å®ã®æã«ããã売äžããŒã¿ãéèšããããšãã売äžç®¡çãããŒã±ãã£ã³ã°æŽ»åã«ãããŠéèŠã§ããããã§ã¯ã2023幎1æã«è¡ããããã¹ãŠã®ååŒã®åèšå£²äžãèšç®ããã¯ãšãªã玹ä»ããŸãã
䜿çšäŸïŒ2023幎1æã®å£²äžéèš
SELECT SUM(amount) AS total_sales
FROM sales
WHERE sale_date BETWEEN '2023-01-01' AND '2023-01-31';
ãã®ã¯ãšãªã§ã¯ãsale_date
ã2023幎1æã®éã«è¡ããã売äžã®åèšé¡ãååŸããŸããSUM()
颿°ã䜿çšããããšã§ãæå®ããæéå
ã®å£²äžã®åèšãèšç®ãããŸãã
ç¹å®ã®ææ¥ã®ããŒã¿ãååŸ
ææ¥å¥ã®ããŒã¿ãåæãããå ŽåãWEEKDAY()
颿°ã䜿ã£ãŠãç¹å®ã®ææ¥ã«è©²åœããããŒã¿ãæœåºã§ããŸããããšãã°ãæ¯é±æææ¥ã«å®æœãããã€ãã³ãã®ã¿ãååŸããå Žåã«åœ¹ç«ã¡ãŸãã
䜿çšäŸïŒæ¯é±æææ¥ã®ã€ãã³ãååŸ
SELECT * FROM events WHERE WEEKDAY(event_date) = 0; -- æææ¥ã¯0
ãã®ã¯ãšãªã§ã¯ãevent_date
ãæææ¥ã«è©²åœããã€ãã³ããååŸããŸããææ¥ããšã®ã€ãã³ãåŸåãåæããéã«äŸ¿å©ã§ãã
æ¥ä»ã䜿ã£ãããŒã¿ã®ãã¬ã³ãåæ
æ¥ä»ã«åºã¥ãããã¬ã³ããåæããå ŽåãããŒã¿ãæ¥ããšãé±ããšãæããšã«éèšããŠåŸåãææ¡ããããšãäžè¬çã§ããããã§ã¯ã1ã¶æéã®æ¥å¥ã¢ã¯ã»ã¹æ°ãéèšããã¯ãšãªã玹ä»ããŸãã
䜿çšäŸïŒæ¥å¥ã¢ã¯ã»ã¹æ°ã®éèš
SELECT DATE(log_date) AS date, COUNT(*) AS access_count
FROM access_logs
WHERE log_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND CURDATE()
GROUP BY DATE(log_date);
ãã®ã¯ãšãªã§ã¯ãéå»1ã¶æéã®ã¢ã¯ã»ã¹ãã°ãæ¥å¥ã«éèšãã忥ä»ããšã®ã¢ã¯ã»ã¹æ°ãååŸããŠããŸããæ¥å¥ã®ã¢ã¯ã»ã¹åŸåãææ¡ããã®ã«é©ããéèšæ¹æ³ã§ãã
æããšã®å£²äžæšç§»ã衚瀺
å£²äžæšç§»ãæåäœã§ææ¡ãããå ŽåãYEAR()
颿°ãšMONTH()
颿°ãçµã¿åãããŠã売äžããŒã¿ãæããšã«éèšããããšãã§ããŸãã
䜿çšäŸïŒæããšã®å£²äžéèš
SELECT YEAR(sale_date) AS year, MONTH(sale_date) AS month, SUM(amount) AS total_sales
FROM sales
GROUP BY YEAR(sale_date), MONTH(sale_date)
ORDER BY year, month;
ãã®ã¯ãšãªã§ã¯ãåæããšã®å£²äžåèšãååŸãã幎æé ã«äžŠã¹æ¿ããŠããŸããæããšã®å£²äžæšç§»ãææ¡ããããšã§ãå£ç¯ããšã®å£²äžãã¿ãŒã³ããã¬ã³ããåæããã®ã«åœ¹ç«ã¡ãŸãã
ç¹å®ã®æé垯ã®ããŒã¿ãååŸ
ç¹å®ã®æé垯ã«ã¢ã¯ã»ã¹ãéäžããã±ãŒã¹ã調ã¹ãããã«ãæéåž¯ãæ¡ä»¶ãšããŠããŒã¿ãååŸããããšãå¯èœã§ããäŸãã°ãååäžã«çºçããã¢ã¯ã»ã¹æ°ã調ã¹ãéã«ã¯ãHOUR()
颿°ã䜿çšããŸãã
䜿çšäŸïŒååäžã®ã¢ã¯ã»ã¹ããŒã¿ååŸ
SELECT * FROM access_logs WHERE HOUR(log_time) BETWEEN 9 AND 12;
ãã®ã¯ãšãªã§ã¯ãlog_time
ãåå9æãã12æãŸã§ã®éã«è©²åœããã¢ã¯ã»ã¹ãã°ãååŸããŸããæé垯å¥ã®ã¢ã¯ã»ã¹åŸåãåæããéã«äŸ¿å©ã§ãã
ãŸãšã
æ¥ä»ããŒã¿ã掻çšããããšã§ãããŒã¿ã®ãã¬ã³ããç¹å®æéã®è©³çŽ°ãªæ å ±ãææ¡ããããšãã§ããŸããäžèšã®äŸãåèã«ãMySQLã®æ¥ä»æäœã䜿ã£ãŠãç®çã«å¿ããããŒã¿æœåºãåæãè¡ããŸããããæ¬¡ç« ã§ã¯ããããã質åãšãã®åçããŸãšããFAQã»ã¯ã·ã§ã³ã«ç§»ããŸãã

10. FAQ
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãMySQLã®æ¥ä»æäœã«é¢ããŠããå¯ãããã質åãšãã®åçããŸãšããŸãããç¹å®ã®ã¯ãšãªã®å®è¡æ¹æ³ãããŒã¿ã®ç®¡çã«ã€ããŠã®çåã解決ããMySQLã®æ¥ä»æäœããã广çã«æŽ»çšããããã«åœ¹ç«ãŠãŠãã ããã
ãããã質åãšåç
Q1. MySQLã§çŸåšã®æ¥ä»ãååŸããã«ã¯ã©ãããã°è¯ãã§ããïŒ
A1. çŸåšã®æ¥ä»ãšæéãååŸããã«ã¯ãNOW()
颿°ã䜿çšããŸããçŸåšã®æ¥ä»ã®ã¿ãååŸãããå Žåã¯ãCURDATE()
颿°ã䟿å©ã§ãã
SELECT NOW(); -- çŸåšã®æ¥ä»ãšæå»
SELECT CURDATE(); -- çŸåšã®æ¥ä»ã®ã¿
Q2. MySQLã§ç¹å®ã®æ¥ä»åœ¢åŒã«ãã©ãŒãããããã«ã¯ïŒ
A2. æ¥ä»ãç¹å®ã®åœ¢åŒã§è¡šç€ºããã«ã¯ãDATE_FORMAT()
颿°ã䜿çšããŸããäŸãã°ããYYYY幎MMæDDæ¥ãã®åœ¢åŒã§è¡šç€ºãããå Žåã¯æ¬¡ã®ããã«èšè¿°ããŸãã
SELECT DATE_FORMAT('2023-01-01', '%Y幎%mæ%dæ¥'); -- 2023幎01æ01æ¥
Q3. TIMESTAMPãšDATETIMEã®éãã¯äœã§ããïŒ
A3. TIMESTAMP
åã¯ãµãŒããŒã®ã¿ã€ã ãŸãŒã³ã«äŸåããã¿ã€ã ãŸãŒã³ã®éããµãŒããŒéã§ã®æ¥æã®äžè²«æ§ã確ä¿ããŸãããŸããèªåæŽæ°ã®èšå®ãå¯èœã§ããäžæ¹ãDATETIME
åã¯ã¿ã€ã ãŸãŒã³ã«äŸåãããæå®ããæ¥æããã®ãŸãŸä¿æããŸãã
Q4. MySQLã§æ¥ä»ãå ç®ã»æžç®ããã«ã¯ã©ãããã°è¯ãã§ããïŒ
A4. æ¥ä»ã®å ç®ã«ã¯DATE_ADD()
ãæžç®ã«ã¯DATE_SUB()
颿°ã䜿çšããŸããäŸãã°ã1é±éåŸã®æ¥ä»ãååŸããå Žåã¯æ¬¡ã®ããã«èšè¿°ããŸãã
SELECT DATE_ADD('2023-01-01', INTERVAL 7 DAY); -- 2023-01-08
SELECT DATE_SUB('2023-01-01', INTERVAL 7 DAY); -- 2022-12-25
Q5. MySQLã§2ã€ã®æ¥ä»ã®å·®ãæ¥æ°ã§ååŸããã«ã¯ïŒ
A5. DATEDIFF()
颿°ã䜿çšããããšã§ã2ã€ã®æ¥ä»éã®æ¥æ°ãååŸã§ããŸããäŸãã°ã2023幎1æ1æ¥ãã2023幎1æ10æ¥ãŸã§ã®æ¥æ°ãååŸããã«ã¯ä»¥äžã®ããã«èšè¿°ããŸãã
SELECT DATEDIFF('2023-01-10', '2023-01-01'); -- 9
Q6. æ¥ä»ã«ã©ã ã®èªåæŽæ°ãèšå®ããã«ã¯ïŒ
A6. TIMESTAMP
åãDATETIME
åã®ã«ã©ã ã«ãON UPDATE CURRENT_TIMESTAMP
ãªãã·ã§ã³ãæå®ããããšã§ãèªåæŽæ°ãå¯èœã§ããããã¯ç¹ã«æçµæŽæ°æ¥æãèšé²ããå Žåã«äŸ¿å©ã§ãã
CREATE TABLE posts (
id INT PRIMARY KEY,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Q7. éå»30æ¥éã®ããŒã¿ãååŸããã«ã¯ïŒ
A7. CURDATE()
颿°ã䜿çšããŠçŸåšã®æ¥ä»ãååŸããDATE_SUB()
颿°ã§éå»30æ¥éã®ããŒã¿ãååŸã§ããŸãã
SELECT * FROM events WHERE event_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY);
Q8. MySQLã§ææ¥ãæå®ããŠããŒã¿ãååŸããã«ã¯ïŒ
A8. WEEKDAY()
颿°ã䜿ããšãææ¥ãæå®ããŠããŒã¿ãååŸã§ããŸããäŸãã°ãæææ¥ã«å®æœãããã€ãã³ããååŸãããå Žåã¯ä»¥äžã®ããã«èšè¿°ããŸãã
SELECT * FROM events WHERE WEEKDAY(event_date) = 0; -- æææ¥ã¯0
ãŸãšã
以äžããMySQLã®æ¥ä»æäœã«é¢ããFAQã§ãããããã®è³ªåãšåçã¯ãæ¥ä»ããŒã¿ã®æäœã«é¢ããŠåºæ¬çãªçåãè§£æ¶ããå¹ççã«ããŒã¿ç®¡çãã§ããããã«ãµããŒããããã®ã§ããããã§èšäºå šäœã®å 容ãç¶²çŸ ããŸããã®ã§ãæ¬¡ç« ã§èŠç¹ããŸãšããæ¥ä»æäœã«é¢ãããã€ã³ããæ¯ãè¿ããŸãã

11. ãŸãšã
ãã®èšäºã§ã¯ãMySQLã«ãããæ¥ä»æäœã®åºæ¬ããå¿çšãŸã§ãããŸããŸãªæ¹æ³ã詳ãã解説ããŸãããæ¥ä»ããŒã¿ã¯ãããŒã¿ããŒã¹ã广çã«ç®¡çããããžãã¹ã§ã®æææ±ºå®ããµããŒãããéèŠãªèŠçŽ ã§ããããã§ãäž»èŠãªãã€ã³ããæ¯ãè¿ããŸãããã
èšäºã®èŠç¹
- æ¥ä»åã®éžæïŒMySQLã®
DATE
ãTIME
ãDATETIME
ãTIMESTAMP
ãYEAR
ãªã©ã®æ¥ä»åã®éããçè§£ããçšéã«å¿ããŠé©åãªåãéžæããããšãéèŠã§ãã - DATETIMEåãšTIMESTAMPåã®éãïŒ
DATETIME
åã¯ã¿ã€ã ãŸãŒã³ã«äŸåãããåºå®ã®æ¥æãä¿åããã®ã«é©ããŠãããTIMESTAMP
åã¯ã¿ã€ã ãŸãŒã³ã«äŸåããäœææ¥æãæŽæ°æ¥æã®èªåèšé²ã«åããŠããŸãã - æ¥ä»é¢æ°ã®æŽ»çšïŒ
NOW()
ãCURDATE()
ãDATE_ADD()
ãDATE_SUB()
ãªã©ã®æ¥ä»é¢æ°ã䜿ãããšã§ãæ¥ä»ã®ååŸãèšç®ãç°¡åã«è¡ããŸãã - æ¥ä»ã®ãã©ãŒããããšå€æïŒ
DATE_FORMAT()
ã䜿ã£ã衚瀺圢åŒã®å€æŽããSTR_TO_DATE()
ã䜿ã£ãæååããã®æ¥ä»å€æãå¯èœã§ãããæè»ãªããŒã¿ç®¡çãã§ããŸãã - æ¥ä»ã®ç¯å²æ€çŽ¢ïŒ
BETWEEN
å¥ãæ¯èŒæŒç®åãæŽ»çšããããšã§ãç¹å®ã®æéã«çµã£ãããŒã¿ã®æœåºãå¹ççã«è¡ããŸãã - èªåæŽæ°ãšããã©ã«ãå€ã®èšå®ïŒ
TIMESTAMP
åãDATETIME
åã«èªåæŽæ°ãããã©ã«ãå€ãèšå®ããããšã§ãäœææ¥æãæŽæ°æ¥æã®ç®¡çã容æã«ãªããŸãã - å®è·µçãªæŽ»çšäŸïŒæ¥ä»æäœã掻çšããç¹å®ã®æéããŒã¿ã®æœåºãæããšã®å£²äžæšç§»ã®éèšãªã©ãå®åã«åœ¹ç«ã€å¿çšçãªã¯ãšãªã®äŸã玹ä»ããŸããã
MySQLæ¥ä»æäœã®æŽ»ç𿹿³
MySQLã®æ¥ä»æ©èœã¯ãæ¥åžžçãªããŒã¿ç®¡çãã詳现ãªåæãŸã§ãå€å²ã«ããã£ãп޻çšã§ããŸããããŒã¿ããŒã¹ã«ãããæ¥ä»ã®æäœæ¹æ³ãæ£ããçè§£ããé©åã«äœ¿ãããšã§ãããŒã¿ç®¡çãããå¹ççã«ãªããããžãã¹ã®çŸå Žã§ã倧ãã«åœ¹ç«ã€ã§ãããã
ä»åŸãããŒã¿ããŒã¹ã«æ°ããããŒãºãçºçããéã«ã¯ããã®èšäºã®å 容ãåèã«ããŠãMySQLã®æ¥ä»æ©èœãé©åã«æŽ»çšããŠã¿ãŠãã ããã