- 1 1. ã¯ããã«
- 2 2. MySQLã§çŸåšæå»ãååŸããæ¹æ³
- 3 3. çŸåšæå»ã®ãã©ãŒããããšè¡šç€º
- 4 4. çŸåšæå»ãçšããæ¥æèšç®
- 4.1 INTERVAL ã䜿ã£ãæ¥æã®å ç®ã»æžç®
- 4.1.1 (1) çŸåšæå»ãã1æéåŸã®æå»ãååŸ
- 4.1.2 åºå
- 4.1.3 (2) çŸåšã®æ¥ä»ãã7æ¥åŸã®æ¥ä»ãååŸ
- 4.1.4 åºå
- 4.1.5 (3) çŸåšã®æ¥ä»ãã3æ¥åã®æ¥ä»ãååŸ
- 4.1.6 åºå
- 4.1.7 (4) ç¹å®ã®æ¥æãã1ã¶æåŸã®æ¥ä»ãååŸ
- 4.1.8 åºå
- 4.1.9 (5) ç¹å®ã®æ¥æãã1幎åŸã®æ¥ä»ãååŸ
- 4.1.10 åºå
- 4.2 DATEDIFF() ã«ããæ¥ä»ã®å·®åèšç®
- 4.3 TIMESTAMPDIFF() ã䜿ã£ãæéåäœã®å·®åèšç®
- 4.4 BETWEEN ã䜿ã£ãæ¥ä»ç¯å²ã®çµã蟌ã¿
- 4.5 ãŸãšã
- 4.1 INTERVAL ã䜿ã£ãæ¥æã®å ç®ã»æžç®
- 5 5. ã¿ã€ã ãŸãŒã³ã®èšå®ãšç®¡ç
- 6 6. çŸåšæå»ãããã©ã«ãå€ãšããŠèšå®ããæ¹æ³
- 7 7. MySQLã®çŸåšæå»ã掻çšããå®çšäŸ
- 8 8. ãããã質åïŒFAQïŒ
- 8.1 NOW() ãš CURRENT_TIMESTAMP ã¯äœãéãã®ãïŒ
- 8.2 NOW() ã§çŸåšæå»ãååŸãããããæ£ããåããªã
- 8.3 CURRENT_TIMESTAMP ã®æå»ããããåå ãšè§£æ±ºç
- 8.4 NOW() ãããã©ã«ãå€ã«èšå®ã§ããªãçç±
- 8.5 BETWEEN ã䜿ã£ãç¯å²æå®ãããŸããããªãå Žåã®å¯ŸåŠæ³
- 8.6 SYSDATE() ã䜿ãã¹ãã±ãŒã¹ãšäœ¿ããªãã»ããããã±ãŒã¹
- 8.7 ãŸãšã
- 9 9. ãŸãšã
1. ã¯ããã«
MySQLã§çŸåšæå»ãååŸããçç±
ããŒã¿ããŒã¹ãå©çšããéãçŸåšã®æ¥æãååŸããããšã¯å€ãã®å Žé¢ã§å¿ èŠã«ãªããŸããäŸãã°ã以äžã®ãããªãŠãŒã¹ã±ãŒã¹ãèããããŸãã
- ããŒã¿ã®äœææ¥æãæŽæ°æ¥æã®èšé²
èšé²ãæ®ãããšã§ãããŒã¿ã®å€æŽå±¥æŽã管çãããããªããŸãã - ãªã¢ã«ã¿ã€ã ããŒã¿ã®åæ
æç³»åããŒã¿ãæ±ãéãçŸåšæå»ãååŸããããšã§ãããŒã¿ã®åŠçãã¹ã ãŒãºã«ãªããŸãã - äžå®æéã®ããŒã¿ãååŸ
äŸãã°ããéå»24æé以å ã«æŽæ°ãããããŒã¿ãååŸããããšãã£ãã¯ãšãªã«çŸåšæå»ãå¿ èŠã§ãã
ãã®èšäºã®ç®çãšæŠèŠ
æ¬èšäºã§ã¯ãMySQLã§çŸåšæå»ãååŸããæ¹æ³ã«ã€ããŠè©³ãã解説ããŸããåºæ¬çãªé¢æ°ã®ç޹ä»ãããæ¥æã®ãã©ãŒããã倿Žãèšç®æ¹æ³ãã¿ã€ã ãŸãŒã³ç®¡çãŸã§ãå¹ åºãã«ããŒããŸããç¹ã«ãåå¿è ã®æ¹ãçè§£ããããããã«ãã³ãŒãäŸã亀ããŠèª¬æããŠãããŸãã
æãç°¡åãªçŸåšæå»ååŸæ¹æ³ïŒçµè«ãã¡ãŒã¹ãïŒ
MySQLã§çŸåšã®æ¥æãååŸããæãç°¡åãªæ¹æ³ã¯ãNOW()
颿°ã䜿çšããããšã§ãã以äžã®SQLãå®è¡ãããšãçŸåšã®æ¥æãååŸã§ããŸãã
SELECT NOW();
ãã®ã¯ãšãªãå®è¡ãããšã以äžã®ãããªçµæãåŸãããŸãã
+---------------------+
| NOW() |
+---------------------+
| 2025-02-23 14:35:00 |
+---------------------+
ãã®ããã«ãçŸåšã®ãæ¥ä»ããšãæå»ããååŸããããšãã§ããŸãã
ãã ããMySQLã«ã¯ä»ã«ã SYSDATE()
ã CURRENT_TIMESTAMP
ãªã©ã®é¢æ°ããããããããç¹æ§ãç°ãªããŸãã
2. MySQLã§çŸåšæå»ãååŸããæ¹æ³
MySQLã§ã¯ãçŸåšã®æ¥æãååŸããããã®é¢æ°ãããã€ãçšæãããŠããŸããããããã®é¢æ°ã«ã¯ç°ãªãç¹æ§ããããããçšéã«å¿ããŠé©åãªãã®ãéžã¶å¿ èŠããããŸãã
MySQLã®çŸåšæå»ååŸã«äœ¿çšã§ãã颿°
颿°å | ååŸã§ããããŒã¿ | ç¹åŸŽ |
---|---|---|
NOW() | æ¥æ (YYYY-MM-DD HH:MM:SS ) | ã¯ãšãªã®å®è¡æç¹ã®æ¥æãè¿ã |
SYSDATE() | æ¥æ (YYYY-MM-DD HH:MM:SS ) | ã¯ãšãªãè©äŸ¡ãããç¬éã®æ¥æãè¿ã |
CURDATE() | æ¥ä» (YYYY-MM-DD ) | çŸåšã®æ¥ä»ã®ã¿ãååŸ |
CURTIME() | æé (HH:MM:SS ) | çŸåšã®æéã®ã¿ãååŸ |
CURRENT_TIMESTAMP | æ¥æ (YYYY-MM-DD HH:MM:SS ) | NOW() ãšã»ãŒåã |
UTC_TIMESTAMP | UTCã®æ¥æ (YYYY-MM-DD HH:MM:SS ) | ã¿ã€ã ãŸãŒã³ã«é¢ä¿ãªã UTC æå»ãè¿ã |
NOW()
颿°
NOW()
ã¯ãçŸåšã®æ¥æãååŸããæãäžè¬çãªé¢æ°ã§ãã
äœ¿ãæ¹
SELECT NOW();
åºåäŸ
+---------------------+
| NOW() |
+---------------------+
| 2025-02-23 14:35:00 |
+---------------------+
ç¹åŸŽ
NOW()
㯠ã¯ãšãªã®å®è¡æç¹ã®æå» ãååŸãããDATETIME
åã®ããŒã¿ãšããŠè¿ãããã
SYSDATE()
颿°
SYSDATE()
ã NOW()
ãšåæ§ã«çŸåšã®æ¥æãååŸãã颿°ã§ãããåäœãç°ãªããŸãã
äœ¿ãæ¹
SELECT SYSDATE();
åºåäŸ
+---------------------+
| SYSDATE() |
+---------------------+
| 2025-02-23 14:35:02 |
+---------------------+
NOW()
ãšã®éã
颿°å | ååŸã¿ã€ãã³ã° |
---|---|
NOW() | ã¯ãšãªã®éå§æç¹ |
SYSDATE() | ã¯ãšãªã®è©äŸ¡æç¹ |
äŸãã°ã以äžã®ãããªã¯ãšãªãå®è¡ãããšéããããããŸãã
SELECT NOW(), SLEEP(2), NOW();
SELECT SYSDATE(), SLEEP(2), SYSDATE();
å®è¡çµæïŒäŸïŒ
+---------------------+----------+---------------------+
| NOW() | SLEEP(2) | NOW() |
+---------------------+----------+---------------------+
| 2025-02-23 14:35:00 | 0 | 2025-02-23 14:35:00 |
+---------------------+----------+---------------------+
+---------------------+----------+---------------------+
| SYSDATE() | SLEEP(2) | SYSDATE() |
+---------------------+----------+---------------------+
| 2025-02-23 14:35:00 | 0 | 2025-02-23 14:35:02 |
+---------------------+----------+---------------------+
ãã€ã³ã
NOW()
㯠ã¯ãšãªã®å®è¡éå§æã®æå» ãè¿ããSYSDATE()
㯠ã¯ãšãªã®è©äŸ¡æç¹ã®æå» ãè¿ããããSLEEP(2)
ãªã©ã®é å»¶åŸã«ç°ãªãå€ã«ãªãã
CURDATE()
ãš CURTIME()
CURDATE()
ã¯çŸåšã®æ¥ä» (YYYY-MM-DD
) ãååŸããCURTIME()
ã¯çŸåšã®æå» (HH:MM:SS
) ãååŸããŸãã
äœ¿ãæ¹
SELECT CURDATE(), CURTIME();
åºåäŸ
+------------+----------+
| CURDATE() | CURTIME() |
+------------+----------+
| 2025-02-23 | 14:35:00 |
+------------+----------+
ç¹åŸŽ
CURDATE()
㯠æ¥ä»ã®ã¿ ãååŸããã®ã§ãDATE
åãšããŠæ±ããããCURTIME()
㯠æéã®ã¿ ãååŸããã®ã§ãTIME
åãšããŠæ±ãããã
CURRENT_TIMESTAMP
颿°
CURRENT_TIMESTAMP
㯠NOW()
ãšã»ãŒåãåãããã颿°ã§ãã
äœ¿ãæ¹
SELECT CURRENT_TIMESTAMP;
åºåäŸ
+---------------------+
| CURRENT_TIMESTAMP |
+---------------------+
| 2025-02-23 14:35:00 |
+---------------------+
ç¹åŸŽ
NOW()
ãšCURRENT_TIMESTAMP
ã¯åºæ¬çã«åãå€ãè¿ããTIMESTAMP
åã®ã«ã©ã ã®ããã©ã«ãå€ãšããŠå©çšã§ããã
CREATE TABLE sample (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
UTC_TIMESTAMP()
颿°
UTC_TIMESTAMP()
ã¯ãUTCïŒåå®äžçæïŒã®çŸåšæå»ãååŸããŸãã
äœ¿ãæ¹
SELECT UTC_TIMESTAMP();
åºåäŸïŒæ¥æ¬æé JST = UTC+9ïŒ
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2025-02-23 05:35:00 |
+---------------------+
ç¹åŸŽ
- ãµãŒããŒã®ã¿ã€ã ãŸãŒã³ã«é¢ä¿ãªããUTC æå»ãååŸ ã§ããã
- ã¿ã€ã ãŸãŒã³ãèæ ®ããåŠçãå¿ èŠãªå Žåã«äŸ¿å©ã
颿°ã®æ¯èŒãŸãšã
颿°å | ååŸããŒã¿ | ååŸã¿ã€ãã³ã° | äž»ãªçšé |
---|---|---|---|
NOW() | æ¥æ (YYYY-MM-DD HH:MM:SS ) | ã¯ãšãªå®è¡éå§æ | äžè¬çãªæ¥æååŸ |
SYSDATE() | æ¥æ (YYYY-MM-DD HH:MM:SS ) | ã¯ãšãªè©äŸ¡æç¹ | ã¯ãšãªå ã§ç°ãªãæå»ãååŸ |
CURDATE() | æ¥ä» (YYYY-MM-DD ) | ã¯ãšãªå®è¡éå§æ | æ¥ä»ã®ã¿ãæ±ã |
CURTIME() | æé (HH:MM:SS ) | ã¯ãšãªå®è¡éå§æ | æéã®ã¿ãæ±ã |
CURRENT_TIMESTAMP | æ¥æ (YYYY-MM-DD HH:MM:SS ) | ã¯ãšãªå®è¡éå§æ | NOW() ãšåããããã©ã«ãå€ãšããŠäœ¿çšå¯èœ |
UTC_TIMESTAMP | UTCæ¥æ (YYYY-MM-DD HH:MM:SS ) | ã¯ãšãªå®è¡éå§æ | ã¿ã€ã ãŸãŒã³ã«é¢ä¿ãªã UTC ã®æå»ãååŸ |
3. çŸåšæå»ã®ãã©ãŒããããšè¡šç€º
MySQLã§çŸåšæå»ãååŸããåŸãããã©ã«ãã® YYYY-MM-DD HH:MM:SS
圢åŒã§ã¯ãªããç¹å®ã®ãã©ãŒãããã§è¡šç€ºãããå Žå ããããŸããããšãã°ãã幎ã ããååŸãããããæééšåã ãã衚瀺ãããããYYYY/MM/DD ã®åœ¢åŒã«å€æŽãããããšãã£ãã±ãŒã¹ã§ãã
MySQLã§ã¯ãããã DATE_FORMAT()
颿° ã䜿ã£ãŠå®çŸã§ããŸãã
DATE_FORMAT()
颿°ã®åºæ¬
DATE_FORMAT()
ã¯ãæå®ããæ¥æããŒã¿ãä»»æã®ãã©ãŒãããã«å€æãã颿°ã§ãã
æ§æ
DATE_FORMAT(å¯Ÿè±¡ã®æ¥æ, 'ãã©ãŒãããæå®')
äŸãã°ãNOW()
ã§ååŸããçŸåšæå»ã YYYY/MM/DD HH:MM
ã®åœ¢åŒã«å€æŽããã«ã¯ã以äžã®SQLãå®è¡ããŸãã
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i');
åºåäŸ
+----------------------+
| DATE_FORMAT(NOW()) |
+----------------------+
| 2025/02/23 14:35 |
+----------------------+
ãã€ã³ã
%Y
â 4æ¡ã®å¹ŽïŒäŸïŒ2025ïŒ%m
â 2æ¡ã®æïŒäŸïŒ02ïŒ%d
â 2æ¡ã®æ¥ïŒäŸïŒ23ïŒ%H
â 24æé衚èšã®æïŒäŸïŒ14ïŒ%i
â åïŒäŸïŒ35ïŒ
DATE_FORMAT()
ã®ãã©ãŒãããæå®äžèЧ
DATE_FORMAT()
ã§ã¯ã以äžã®ãããªèšå·ã䜿ã£ãŠãæ¥æã®ãã©ãŒããããèªç±ã«å€æŽã§ããŸãã
æå®å | 説æ | åºåäŸ |
---|---|---|
%Y | 4æ¡ã®å¹Ž | 2025 |
%y | 2æ¡ã®å¹Ž | 25 |
%m | 2æ¡ã®æïŒ01ã12ïŒ | 02 |
%c | 1ã12ã®æ | 2 |
%d | 2æ¡ã®æ¥ïŒ01ã31ïŒ | 23 |
%e | 1ã31ã®æ¥ïŒå é ãŒããªãïŒ | 23 |
%H | 24æé衚èšã®æïŒ00ã23ïŒ | 14 |
%h | 12æé衚èšã®æïŒ01ã12ïŒ | 02 |
%i | åïŒ00ã59ïŒ | 35 |
%s | ç§ïŒ00ã59ïŒ | 50 |
%p | AM / PM è¡šèš | PM |
ãã䜿ããã©ãŒãããäŸ
(1) YYYY/MM/DD
圢åŒã§è¡šç€º
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d');
åºå
+----------------------+
| DATE_FORMAT(NOW()) |
+----------------------+
| 2025/02/23 |
+----------------------+
(2) YYYY幎MMæDDæ¥
ã®æ¥æ¬èªè¡šèš
SELECT DATE_FORMAT(NOW(), '%Y幎%mæ%dæ¥');
åºå
+----------------------+
| DATE_FORMAT(NOW()) |
+----------------------+
| 2025幎02æ23æ¥ |
+----------------------+
(3) 12æéè¡šèš (AM/PM) ã§è¡šç€º
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %h:%i %p');
åºå
+------------------------+
| DATE_FORMAT(NOW()) |
+------------------------+
| 2025-02-23 02:35 PM |
+------------------------+
æééšåã»æ¥ä»éšåã®ã¿ãååŸ
å Žåã«ãã£ãŠã¯ãçŸåšã®æ¥ä»ã ãååŸ ããããçŸåšã®æéã ããååŸ ãããã±ãŒã¹ããããŸãã
(1) æ¥ä» (YYYY-MM-DD
) ã ãååŸ
SELECT CURDATE();
åºå
+------------+
| CURDATE() |
+------------+
| 2025-02-23 |
+------------+
(2) æå» (HH:MM:SS
) ã ãååŸ
SELECT CURTIME();
åºå
+----------+
| CURTIME() |
+----------+
| 14:35:50 |
+----------+
ããªç§ (ãã€ã¯ãç§) ãå«ãããã©ãŒããã
MySQL 5.6.4 以éã§ã¯ãNOW(6)
ãªã©ã®é¢æ°ã䜿ãããšã§ ãã€ã¯ãç§ïŒå°æ°ç¹ä»¥äž6æ¡ïŒ ãååŸããããšãå¯èœã§ãã
(1) ãã€ã¯ãç§ä»ãã®çŸåšæå»ãååŸ
SELECT NOW(6);
åºå
+----------------------------+
| NOW(6) |
+----------------------------+
| 2025-02-23 14:35:50.123456 |
+----------------------------+
(2) ãã€ã¯ãç§ãå«ããã©ãŒããã
SELECT DATE_FORMAT(NOW(6), '%Y-%m-%d %H:%i:%s.%f');
åºå
+------------------------------+
| DATE_FORMAT(NOW(6)) |
+------------------------------+
| 2025-02-23 14:35:50.123456 |
+------------------------------+
ãŸãšã
DATE_FORMAT()
ã䜿ããšãæ¥æãèªç±ã«ãã©ãŒãããå¯èœãCURDATE()
ãCURTIME()
ã䜿ããšãæ¥ä»ãæå»ã®ã¿ååŸã§ããã- MySQL 5.6.4 以éã§ã¯ãã€ã¯ãç§ãæ±ããã
AM/PM
衚èšãYYYY/MM/DD
圢åŒãYYYY幎MMæDDæ¥
ãªã© æ§ã ãªãã©ãŒãããã«å¯Ÿå¿ ã§ããã
4. çŸåšæå»ãçšããæ¥æèšç®
MySQLã§ã¯ãçŸåšæå»ãåºæºã«ããæ¥æã®èšç®ãå¯èœã§ããããšãã°ãã1æéåŸã®æå»ãååŸãããã3æ¥åã®æ¥ä»ãååŸãããã2ã€ã®æ¥æã®å·®ãæ±ããããšãã£ãåŠçãè¡ãããšãã§ããŸãã
INTERVAL
ã䜿ã£ãæ¥æã®å ç®ã»æžç®
MySQLã§ã¯ãINTERVAL
ã䜿ã£ãŠæ¥æã«å¯ŸããŠå ç®ã»æžç®ãè¡ãããšãã§ããŸãã
(1) çŸåšæå»ãã1æéåŸã®æå»ãååŸ
SELECT NOW() AS çŸåšæå», NOW() + INTERVAL 1 HOUR AS 1æéåŸ;
åºå
+---------------------+---------------------+
| çŸåšæå» | 1æéåŸ |
+---------------------+---------------------+
| 2025-02-23 14:35:00 | 2025-02-23 15:35:00 |
+---------------------+---------------------+
(2) çŸåšã®æ¥ä»ãã7æ¥åŸã®æ¥ä»ãååŸ
SELECT CURDATE() AS 仿¥, CURDATE() + INTERVAL 7 DAY AS 1é±éåŸ;
åºå
+------------+------------+
| 仿¥ | 1é±éåŸ |
+------------+------------+
| 2025-02-23 | 2025-03-02 |
+------------+------------+
(3) çŸåšã®æ¥ä»ãã3æ¥åã®æ¥ä»ãååŸ
SELECT CURDATE() AS 仿¥, CURDATE() - INTERVAL 3 DAY AS 3æ¥å;
åºå
+------------+------------+
| 仿¥ | 3æ¥å |
+------------+------------+
| 2025-02-23 | 2025-02-20 |
+------------+------------+
(4) ç¹å®ã®æ¥æãã1ã¶æåŸã®æ¥ä»ãååŸ
SELECT DATE_ADD('2025-02-23', INTERVAL 1 MONTH) AS 1ã¶æåŸ;
åºå
+------------+
| 1ã¶æåŸ |
+------------+
| 2025-03-23 |
+------------+
(5) ç¹å®ã®æ¥æãã1幎åŸã®æ¥ä»ãååŸ
SELECT DATE_ADD('2025-02-23', INTERVAL 1 YEAR) AS 1幎åŸ;
åºå
+------------+
| 1å¹ŽåŸ |
+------------+
| 2026-02-23 |
+------------+
DATEDIFF()
ã«ããæ¥ä»ã®å·®åèšç®
DATEDIFF()
颿°ã䜿ããšã2ã€ã®æ¥ä»ã®å·®ããæ¥åäœãã§ååŸ ã§ããŸãã
(1) 2ã€ã®æ¥ä»ã®å·®ãæ±ãã
SELECT DATEDIFF('2025-03-01', '2025-02-23') AS æ¥æ°å·®;
åºå
+--------+
| æ¥æ°å·® |
+--------+
| 6 |
+--------+
(2) çŸåšã®æ¥ä»ãšç¹å®ã®æ¥ä»ã®å·®ãæ±ãã
SELECT DATEDIFF(NOW(), '2025-01-01') AS çµéæ¥æ°;
åºå
+------------+
| çµéæ¥æ° |
+------------+
| 53 |
+------------+
TIMESTAMPDIFF()
ã䜿ã£ãæéåäœã®å·®åèšç®
TIMESTAMPDIFF()
ã䜿ããšãæéã»åã»ç§åäœã§ã®å·®åèšç® ãå¯èœã§ãã
(1) 2ã€ã®æ¥æã®å·®ããæéåäœãã§æ±ãã
SELECT TIMESTAMPDIFF(HOUR, '2025-02-23 12:00:00', '2025-02-23 18:30:00') AS æéå·®;
åºå
+--------+
| æéå·® |
+--------+
| 6 |
+--------+
(2) 2ã€ã®æ¥æã®å·®ããååäœãã§æ±ãã
SELECT TIMESTAMPDIFF(MINUTE, '2025-02-23 12:00:00', '2025-02-23 12:30:00') AS åå·®;
åºå
+------+
| åå·® |
+------+
| 30 |
+------+
(3) 2ã€ã®æ¥æã®å·®ããç§åäœãã§æ±ãã
SELECT TIMESTAMPDIFF(SECOND, '2025-02-23 12:00:00', '2025-02-23 12:00:45') AS ç§å·®;
åºå
+------+
| ç§å·® |
+------+
| 45 |
+------+
BETWEEN
ã䜿ã£ãæ¥ä»ç¯å²ã®çµã蟌ã¿
ããŒã¿ããŒã¹å
ã§ãç¹å®ã®æéå
ã«ããããŒã¿ãååŸãããããšãã£ãã±ãŒã¹ã§ã¯ãBETWEEN
ã䜿ãããšã§ç°¡åã«å®çŸã§ããŸãã
(1) éå»1é±éã®ããŒã¿ãååŸ
SELECT * FROM orders WHERE order_date BETWEEN CURDATE() - INTERVAL 7 DAY AND CURDATE();
ïŒãã®ã¯ãšãªã¯ãéå»7æ¥éã®æ³šæããŒã¿ãååŸïŒ
(2) 2025幎2æ1æ¥ãã2æ15æ¥ãŸã§ã®ããŒã¿ãååŸ
SELECT * FROM orders WHERE order_date BETWEEN '2025-02-01' AND '2025-02-15';
ãŸãšã
INTERVAL
ã䜿ãããšã§ãæ¥æã®å ç®ã»æžç®ãç°¡åã«ã§ãããDATEDIFF()
ã䜿ããšãæ¥åäœã§ã®å·®åèšç®ãå¯èœãTIMESTAMPDIFF()
ã䜿ãã°ãæéã»åã»ç§åäœã§ã®å·®åèšç®ãã§ãããBETWEEN
ã䜿ãããšã§ãç¹å®ã®æéå ã®ããŒã¿ãç°¡åã«ååŸã§ããã

5. ã¿ã€ã ãŸãŒã³ã®èšå®ãšç®¡ç
MySQLã§ã¯ããµãŒããŒã®ããã©ã«ãã®ã¿ã€ã ãŸãŒã³ãåºæºã«çŸåšæå»ãååŸããŸããããããã·ã¹ãã ã®ä»æ§ãã°ããŒãã«ãªã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåãç°ãªãã¿ã€ã ãŸãŒã³ã§ã®æå»ç®¡çãå¿ èŠã«ãªãããšããããŸãã
çŸåšã®ã¿ã€ã ãŸãŒã³ã®ç¢ºèªæ¹æ³
MySQLã§ã¯ãçŸåšèšå®ãããŠããã¿ã€ã ãŸãŒã³ã以äžã®SQLã§ç¢ºèªã§ããŸãã
SELECT @@global.time_zone, @@session.time_zone;
åºåäŸ
+--------------------+------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+------------------+
| SYSTEM | SYSTEM |
+--------------------+------------------+
解説
@@global.time_zone
㯠ãµãŒããŒå šäœã®ã¿ã€ã ãŸãŒã³ ã瀺ããŸãã@@session.time_zone
㯠çŸåšã®ã»ãã·ã§ã³ã®ã¿ã€ã ãŸãŒã³ ã瀺ããŸãã
ããã©ã«ãã§ã¯ SYSTEM
ã«ãªã£ãŠãããOSã®ã¿ã€ã ãŸãŒã³èšå®ã䜿çšããŠããŸãã
ã»ãã·ã§ã³åäœã§ã®ã¿ã€ã ãŸãŒã³å€æŽ
MySQLã§ã¯ãäžæçã«ã¿ã€ã ãŸãŒã³ã倿Žããããšãã§ããŸããäŸãã°ãJSTïŒæ¥æ¬æšæºæïŒã«å€æŽããã«ã¯ä»¥äžã®SQLãå®è¡ããŸãã
SET time_zone = 'Asia/Tokyo';
ãŸãã¯ãUTCïŒåå®äžçæïŒã«èšå®ããã«ã¯æ¬¡ã®ããã«ããŸãã
SET time_zone = '+00:00';
èšå®åŸã«ã¿ã€ã ãŸãŒã³ã確èª
SELECT @@session.time_zone;
åºåäŸ
+------------------+
| @@session.time_zone |
+------------------+
| Asia/Tokyo |
+------------------+
ãã€ã³ã
- ãã®èšå®ã¯ çŸåšã®ã»ãã·ã§ã³ã®ã¿ ã«é©çšãããæ¥ç¶ãåæãããšå ã«æ»ããŸãã
- æ°žç¶çã«é©çšãããå Žåã¯ããµãŒããŒã®èšå®ã倿Žããå¿ èŠããããŸãïŒæ¬¡ã®ã»ã¯ã·ã§ã³åç §ïŒã
ãµãŒããŒå šäœã®ããã©ã«ãã¿ã€ã ãŸãŒã³ãèšå®ããæ¹æ³
ãµãŒããŒå
šäœã®ããã©ã«ãã¿ã€ã ãŸãŒã³ã倿Žããã«ã¯ãMySQLã®èšå®ãã¡ã€ã«ïŒmy.cnf
ãŸã㯠my.ini
ïŒãç·šéããdefault_time_zone
ãèšå®ããŸãã
(1) èšå®ãã¡ã€ã«ãç·šé
Linux ã®å ŽåïŒmy.cnf
ïŒïŒ
[mysqld]
default_time_zone = 'Asia/Tokyo'
Windows ã®å ŽåïŒmy.ini
ïŒïŒ
[mysqld]
default_time_zone = '+09:00'
(2) MySQLãåèµ·å
èšå®å€æŽåŸãMySQLãµãŒããŒãåèµ·åããŸãã
LinuxïŒ
sudo systemctl restart mysql
WindowsïŒ
net stop mysql
net start mysql
(3) èšå®ç¢ºèª
SELECT @@global.time_zone;
åºåäŸ
+--------------------+
| @@global.time_zone |
+--------------------+
| Asia/Tokyo |
+--------------------+
UTCæå»ã®ååŸ (UTC_TIMESTAMP()
)
ã°ããŒãã«ãªã·ã¹ãã ãæ§ç¯ããéã«ã¯ããµãŒããŒã®ã¿ã€ã ãŸãŒã³ã«äŸåãããçµ±äžãããUTCæå»ãæ±ãããšãéèŠ ã§ãã
MySQLã§ã¯ãUTC_TIMESTAMP()
ã䜿ããš UTCã®çŸåšæå» ãååŸã§ããŸãã
SELECT UTC_TIMESTAMP();
åºåäŸ
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2025-02-23 05:35:00 |
+---------------------+
ãã€ã³ã
UTC_TIMESTAMP()
㯠ã¿ã€ã ãŸãŒã³ã®åœ±é¿ãåããªãã- ã¿ã€ã ãŸãŒã³ãæå®ããã«ã°ããŒãã«ãªããŒã¿ã管çãããå Žåã«äŸ¿å©ã
CONVERT_TZ()
ã䜿ã£ãæå»ã®å€æ
MySQLã® CONVERT_TZ()
ã䜿çšãããšãããã¿ã€ã ãŸãŒã³ã®æ¥æãå¥ã®ã¿ã€ã ãŸãŒã³ã«å€æã§ããŸãã
(1) UTC ãã JST ã«å€æ
SELECT CONVERT_TZ('2025-02-23 05:35:00', '+00:00', '+09:00') AS æ¥æ¬æé;
åºå
+---------------------+
| æ¥æ¬æé |
+---------------------+
| 2025-02-23 14:35:00 |
+---------------------+
(2) ã¿ã€ã ãŸãŒã³ã®ååã䜿çšããå Žå
MySQLã® time_zone
ããŒãã«ãèšå®ãããŠããå Žåã以äžã®ããã«ã¿ã€ã ãŸãŒã³åãæå®ããŠå€æã§ããŸãã
SELECT CONVERT_TZ('2025-02-23 05:35:00', 'UTC', 'Asia/Tokyo');
åºå
+---------------------+
| æ¥æ¬æé |
+---------------------+
| 2025-02-23 14:35:00 |
+---------------------+
(3) MySQLã®ã¿ã€ã ãŸãŒã³ããŒã¿ãæŽæ°ãã
MySQLã§ CONVERT_TZ()
ã䜿çšããéãtime_zone
ããŒãã«ã空ã®å ŽåããããŸãããã®å Žåã以äžã®ã³ãã³ãã§ããŒã¿ãæŽæ°ã§ããŸãïŒLinuxç°å¢ïŒã
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
ãŸãšã
SELECT @@global.time_zone, @@session.time_zone;
ã§çŸåšã®ã¿ã€ã ãŸãŒã³ã確èªã§ãããSET time_zone = 'Asia/Tokyo';
ã§ ã»ãã·ã§ã³åäœã®ã¿ã€ã ãŸãŒã³å€æŽ ãå¯èœãdefault_time_zone
ãmy.cnf
ã«èšå®ããMySQLãåèµ·åãããš ãµãŒããŒå šäœã®ã¿ã€ã ãŸãŒã³ãå€æŽ ã§ãããUTC_TIMESTAMP()
ã䜿çšãããšããµãŒããŒã®ã¿ã€ã ãŸãŒã³ã«é¢ä¿ãªã UTCæå»ãååŸ ã§ãããCONVERT_TZ()
ã䜿ããšãç°ãªãã¿ã€ã ãŸãŒã³éã®å€æ ãã§ããã
6. çŸåšæå»ãããã©ã«ãå€ãšããŠèšå®ããæ¹æ³
ããŒã¿ããŒã¹ã®èšèšã§ã¯ãããŒãã«ã®ç¹å®ã®ã«ã©ã ã«ãããã©ã«ãã§çŸåšæå»ãã»ãããããããšãæ±ããããããšãå€ããããŸããäŸãã°ãã¬ã³ãŒãã®äœææ¥æãæŽæ°æ¥æãèªåçã«èšé²ããå Žåãªã©ã§ãã
CURRENT_TIMESTAMP
ãããã©ã«ãå€ãšããŠèšå®
MySQLã§ã¯ãTIMESTAMP
åãŸã㯠DATETIME
åã®ã«ã©ã ã« CURRENT_TIMESTAMP
ãããã©ã«ãå€ãšããŠèšå®ã§ããŸããããã«ãããã¬ã³ãŒããæ¿å
¥ãããéã«èªåçã«çŸåšæå»ãã»ãããããŸãã
(1) CURRENT_TIMESTAMP
ãããã©ã«ãå€ã«ãã
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ãã®ããŒãã«ã«ããŒã¿ãæ¿å
¥ãããšãcreated_at
ã«ã©ã ã«ã¯èªåçã«çŸåšæå»ãèšå®ãããŸãã
INSERT INTO users (name) VALUES ('Alice');
SELECT * FROM users;
åºå
+----+-------+---------------------+
| id | name | created_at |
+----+-------+---------------------+
| 1 | Alice | 2025-02-23 14:35:00 |
+----+-------+---------------------+
ON UPDATE CURRENT_TIMESTAMP
ã«ããèªåæŽæ°
CURRENT_TIMESTAMP
㯠ON UPDATE
å¥ãšçµã¿åãããããšã§ãã¬ã³ãŒããæŽæ°ãããéã«èªåçã«çŸåšæå»ãã»ããã§ããŸãã
(1) ON UPDATE CURRENT_TIMESTAMP
ãèšå®
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
created_at
ã¯ã¬ã³ãŒãäœææã« ååã®ã¿ çŸåšæå»ãã»ããããããupdated_at
ã¯ã¬ã³ãŒãæŽæ°æã« èªåçã«çŸåšæå»ã«æŽæ°ãããã
(2) ããŒã¿ã®æ¿å ¥
INSERT INTO users (name) VALUES ('Bob');
SELECT * FROM users;
åºå
+----+------+---------------------+---------------------+
| id | name | created_at | updated_at |
+----+------+---------------------+---------------------+
| 1 | Bob | 2025-02-23 14:40:00 | 2025-02-23 14:40:00 |
+----+------+---------------------+---------------------+
(3) ããŒã¿ãæŽæ°
UPDATE users SET name = 'Bobby' WHERE id = 1;
SELECT * FROM users;
åºå
+----+-------+---------------------+---------------------+
| id | name | created_at | updated_at |
+----+-------+---------------------+---------------------+
| 1 | Bobby | 2025-02-23 14:40:00 | 2025-02-23 14:42:10 |
+----+-------+---------------------+---------------------+
ãã®ããã«ãupdated_at
ã®å€ãèªåçã«æŽæ°ãããŠããŸãã
DATETIME
åãš TIMESTAMP
åã®éã
MySQLã§ã¯ãæ¥ä»ã»æå»ãæ±ãããã« DATETIME
åãš TIMESTAMP
åã®2çš®é¡ããããŸããããããã®ç¹åŸŽãçè§£ããé©åã«äœ¿ãåããããšãéèŠã§ãã
å | æ ŒçŽç¯å² | ã¹ãã¬ãŒãžãµã€ãº | ã¿ã€ã ãŸãŒã³ã®åœ±é¿ | CURRENT_TIMESTAMP ã®äœ¿çš |
---|---|---|---|---|
DATETIME | 1000-01-01 00:00:00 ïœ 9999-12-31 23:59:59 | 8ãã€ã | ãªã | æç€ºçã«èšå®å¯èœ |
TIMESTAMP | 1970-01-01 00:00:01 UTC ïœ 2038-01-19 03:14:07 UTC | 4ãã€ã | ãã | ããã©ã«ãã§ CURRENT_TIMESTAMP å¯ |
䜿ãåãã®ãã€ã³ã
DATETIME
ã䜿ãã¹ãå Žå- ã¿ã€ã ãŸãŒã³ã®åœ±é¿ãåããããªãïŒåºå®ã®æ¥æãä¿åãããïŒã
- 2038幎以éã®ããŒã¿ãæ±ãå¯èœæ§ãããã
TIMESTAMP
ã䜿ãã¹ãå Žå- MySQLã®ããã©ã«ãã®ã¿ã€ã ãŸãŒã³ã«å¿ããæéãæ±ãããã
CURRENT_TIMESTAMP
ãããã©ã«ãå€ãšããŠäœ¿çšãããïŒDATETIME
ã§ã¯æç€ºçãªèšå®ãå¿ èŠïŒã
NOW()
ãããã©ã«ãå€ã«èšå®ã§ããªãçç±
CURRENT_TIMESTAMP
ã¯ããã©ã«ãå€ãšããŠäœ¿çšã§ããŸãããNOW()
颿°ã¯ããã©ã«ãå€ãšããŠçŽæ¥èšå®ã§ããŸããã
(1) NOW()
ãããã©ã«ãå€ã«èšå®ããããšãããšãšã©ãŒ
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event VARCHAR(255),
created_at DATETIME DEFAULT NOW()
);
ãšã©ãŒ
ERROR 1067 (42000): Invalid default value for 'created_at'
ãã®ãšã©ãŒã¯ãNOW()
ã颿°ã§ãããããããã©ã«ãå€ãšããŠçŽæ¥äœ¿çšã§ããªãããšã瀺ããŠããŸãã
(2) 解決ç
代ããã« CURRENT_TIMESTAMP
ã䜿çšããŸãã
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ãŸããNOW()
ã䜿ãããå Žå㯠BEFORE INSERT
ããªã¬ãŒ ã䜿çšããããšãå¯èœã§ãã
CREATE TRIGGER set_created_at BEFORE INSERT ON logs
FOR EACH ROW
SET NEW.created_at = NOW();
ãŸãšã
CURRENT_TIMESTAMP
ãDEFAULT
ã«èšå®ããããšã§ãã¬ã³ãŒãäœææã«çŸåšæå»ãèªåæ¿å ¥ã§ãããON UPDATE CURRENT_TIMESTAMP
ãèšå®ãããšãã¬ã³ãŒãæŽæ°æã«èªåçã«ã¿ã€ã ã¹ã¿ã³ããæŽæ°ããããDATETIME
ãšTIMESTAMP
ã®éããçè§£ããé©åã«äœ¿ãåããããšãéèŠãNOW()
ã¯ããã©ã«ãå€ã«ã§ããªãããCURRENT_TIMESTAMP
ã䜿ãããšã§ä»£çšå¯èœãBEFORE INSERT
ããªã¬ãŒã䜿çšããã°ãNOW()
ãããã©ã«ãå€ã®ããã«æ±ãããšãã§ããã
7. MySQLã®çŸåšæå»ã掻çšããå®çšäŸ
MySQLã§çŸåšæå»ãååŸã»æäœããæ¹æ³ãåŠãã ãšããã§ã次㯠å®éã®æ¥åãéçºã§ã©ã®ããã«æŽ»çšã§ããã®ã ãå ·äœçã«èŠãŠãããŸãããã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ã以äžã®å®çšäŸã玹ä»ããŸãã
- ãã°èšé²ã«çŸåšæå»ã远å
- éå»24æéã®ããŒã¿ãååŸ
- ãŠãŒã¶ãŒã®æçµãã°ã€ã³æå»ãæŽæ°
- ããŒã¿ã®äœææ¥æã»æŽæ°æ¥æãèªåèšé²
- äžå®æéå ã®ããŒã¿ãååŸããSQL
ãã°èšé²ã«çŸåšæå»ã远å
ã·ã¹ãã ã®ãã°ããšã©ãŒãã°ãèšé²ããéãçºçæ¥æãšãšãã«ä¿åããããšãäžè¬çã§ããããã«ããããã©ãã«ã·ã¥ãŒãã£ã³ã°ã容æã«ãªããŸãã
(1) ãã°ããŒãã«ã®äœæ
CREATE TABLE system_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event_type VARCHAR(255),
message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
(2) ãã°ã远å
INSERT INTO system_logs (event_type, message)
VALUES ('ERROR', 'ãµãŒããŒæ¥ç¶ã«å€±æããŸãã');
(3) ææ°ã®ãã°ãååŸ
SELECT * FROM system_logs ORDER BY created_at DESC LIMIT 10;
ãã®ããã« CURRENT_TIMESTAMP
ã䜿çšããããšã§ããã°ã®äœææ¥æãèªåçã«èšé²ã§ããŸãã
éå»24æéã®ããŒã¿ãååŸ
ECãµã€ãããŠãŒã¶ãŒç®¡çã·ã¹ãã ãªã©ã§ã¯ããéå»24æéã«çºçããã€ãã³ããæ³šæãååŸãããããšããã±ãŒã¹ãé »ç¹ã«ãããŸãã
(1) éå»24æé以å ã«ç»é²ããããŠãŒã¶ãŒãååŸ
SELECT * FROM users WHERE created_at >= NOW() - INTERVAL 1 DAY;
ãã®ã¯ãšãªãå®è¡ãããšãçŸåšæå»ãã éå»24æé以å ã«ç»é²ããããŠãŒã¶ãŒ ãååŸã§ããŸãã
(2) éå»24æéã®æ³šæãååŸ
SELECT * FROM orders WHERE order_date >= NOW() - INTERVAL 1 DAY;
ãŠãŒã¶ãŒã®æçµãã°ã€ã³æå»ãæŽæ°
ãŠãŒã¶ãŒããã°ã€ã³ãããã³ã«ãæçµãã°ã€ã³æå»ãæŽæ°ããããšã§ãã¢ã¯ãã£ããŠãŒã¶ãŒã®ç®¡ç ãå¯èœã«ãªããŸãã
(1) ãŠãŒã¶ãŒããŒãã«ã®äœæ
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255),
last_login TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
last_login
ã¯ãŠãŒã¶ãŒããã°ã€ã³ãããã³ã« èªåæŽæ° ãããŸãã
(2) ãŠãŒã¶ãŒããã°ã€ã³ããéã«ãã°ã€ã³æå»ãæŽæ°
UPDATE users SET last_login = NOW() WHERE id = 1;
(3) æçµãã°ã€ã³ã1é±é以äžåã®ãŠãŒã¶ãŒãååŸ
SELECT * FROM users WHERE last_login < NOW() - INTERVAL 7 DAY;
ãã®ã¯ãšãªã䜿ãã°ããæåŸã®ãã°ã€ã³ã1é±é以äžåã®ãŠãŒã¶ãŒããæœåºã§ããŸãã
ããŒã¿ã®äœææ¥æã»æŽæ°æ¥æãèªåèšé²
ããŒã¿ããŒã¹ã§ã¯ããã¬ã³ãŒãã®äœææ¥æã»æŽæ°æ¥æãèªåçã«ç®¡çãããã®ãäžè¬çã§ãã
(1) èªåçã«äœæã»æŽæ°æå»ãèšé²ããããŒãã«
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
created_at
â ã¬ã³ãŒãäœææã«èªåã»ããupdated_at
â ã¬ã³ãŒããæŽæ°ããããã³ã«èªåæŽæ°
(2) æ°ããèšäºã远å
INSERT INTO articles (title, content)
VALUES ('MySQLã®çŸåšæå»ã®äœ¿ãæ¹', 'MySQLã®NOW()颿°ã«ã€ããŠè©³ãã解説ããŸãã');
(3) èšäºã®å å®¹ãæŽæ°
UPDATE articles SET content = 'NOW()ã ãã§ãªããCURRENT_TIMESTAMPã詳ãã解説ããŸãã'
WHERE id = 1;
ãã®ããã«ãããšãã¬ã³ãŒããæŽæ°ãããã³ã« updated_at
ãèªåçã«å€æŽããããããæåã§æŽæ°æ¥æãã»ããããå¿
èŠããªããªããŸãã
äžå®æéå ã®ããŒã¿ãååŸããSQL
ç¹å®ã®æéå ã«ç»é²ãããããŒã¿ãååŸããããšã¯ã売äžåæããŠãŒã¶ãŒã¢ã¯ãã£ããã£ã®èšæž¬ã«åœ¹ç«ã¡ãŸãã
(1) æå®ãããæéå ã®æ³šæãååŸ
SELECT * FROM orders WHERE order_date BETWEEN '2025-02-01' AND '2025-02-15';
ãã®ã¯ãšãªã¯ã2025幎2æ1æ¥ãã2æ15æ¥ãŸã§ã®æ³šæãååŸããŸãã
(2) 1ã¶æä»¥å ã«ç»é²ããããŠãŒã¶ãŒãååŸ
SELECT * FROM users WHERE created_at >= NOW() - INTERVAL 1 MONTH;
INTERVAL 1 MONTH
ã䜿ãããšã§ããéå»1ã¶æä»¥å ã«ç»é²ããããŠãŒã¶ãŒããååŸã§ããŸãã
ãŸãšã
CURRENT_TIMESTAMP
ã䜿ãããšã§ããã°ãã€ãã³ãã®äœææå»ãèªåèšé²ã§ãããNOW() - INTERVAL X DAY
ã䜿ãã°ãéå»Xæ¥éã®ããŒã¿ãç°¡åã«ååŸ ã§ãããON UPDATE CURRENT_TIMESTAMP
ãå©çšãããšããŠãŒã¶ãŒã®æçµãã°ã€ã³æå»ãèªå管ç ã§ãããBETWEEN
ã䜿ããšãç¹å®ã®æéå ã®ããŒã¿ãååŸ ã§ããã- ããŒã¿ã®äœæã»æŽæ°æ¥æã®ç®¡çã«ã¯
TIMESTAMP
ãæŽ»çšãããšäŸ¿å©ã
8. ãããã質åïŒFAQïŒ
MySQLã®çŸåšæå»ã«é¢ããæäœãè¡ãéã«ã¯ãããã€ãã®çåããã©ãã«ã«çŽé¢ããããšããããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ããããã質åãšãã®è§£æ±ºæ¹æ³ ãQ&A圢åŒã§è§£èª¬ããŸãã
NOW()
ãš CURRENT_TIMESTAMP
ã¯äœãéãã®ãïŒ
Q: NOW()
ãš CURRENT_TIMESTAMP
ã¯ã©ã¡ããçŸåšæå»ãååŸã§ããŸãããéãã¯ãããŸããïŒ
A: ã»ãŒåãåäœãããŸãããããããªéãããããŸãã
颿°å | è¿ãããããŒã¿å | äž»ãªéã |
---|---|---|
NOW() | DATETIME | ã¯ãšãªå®è¡æã®æå»ãè¿ã |
CURRENT_TIMESTAMP | TIMESTAMP | TIMESTAMP åã®ã«ã©ã ã®ããã©ã«ãå€ã«äœ¿çšã§ãã |
ç¹ã« CURRENT_TIMESTAMP
㯠TIMESTAMP
åã®ã«ã©ã ã«èªåçã«é©çšã§ãããããããŒãã«èšèšæã«åœ¹ç«ã€ å Žé¢ãå€ãã§ãã
NOW()
ã§çŸåšæå»ãååŸãããããæ£ããåããªã
Q: SELECT NOW();
ãå®è¡ããŠããæå»ãæã£ãããã«ååŸã§ããŸãããåå ã¯äœã§ããïŒ
A: èããããåå ã¯ä»¥äžã®éãã§ãã
- ãµãŒããŒã®ã¿ã€ã ãŸãŒã³ãé©åã«èšå®ãããŠããªã
SELECT @@global.time_zone, @@session.time_zone;
ããã§ãµãŒããŒãšã»ãã·ã§ã³ã®ã¿ã€ã ãŸãŒã³ã確èªããå¿ èŠã«å¿ããŠå€æŽããŸãããã
SET time_zone = 'Asia/Tokyo';
- MySQLã®èšå®ã§ã¿ã€ã ãŸãŒã³ã
SYSTEM
ã«ãªã£ãŠãã
SYSTEM
ã®å ŽåãOSã®ã¿ã€ã ãŸãŒã³èšå®ã«äŸåããŸãã- ãã®ãããMySQLãšOSã®ã¿ã€ã ãŸãŒã³èšå®ãçµ±äžããããšãéèŠã§ãã
CURRENT_TIMESTAMP
ã®æå»ããããåå ãšè§£æ±ºç
Q: CURRENT_TIMESTAMP
ãããã©ã«ãå€ãšããŠèšå®ããã®ã«ãäºæ³ããæå»ãšç°ãªãå Žåã®åå ã¯ïŒ
A: ããã€ãã®èŠå ãèããããŸãã
- ããŒã¿ããŒã¹ã®ã¿ã€ã ãŸãŒã³ãšã¢ããªã±ãŒã·ã§ã³ã®ã¿ã€ã ãŸãŒã³ãç°ãªã£ãŠãã
SELECT @@global.time_zone, @@session.time_zone;
ã§ç¢ºèªããŸãããã- ããéã£ãŠããããçµ±äžããããšãæšå¥šããŸãã
TIMESTAMP
åã¯DATETIME
åãšç°ãªãããµãŒããŒã®ã¿ã€ã ãŸãŒã³ã®åœ±é¿ãåãã
- ã¿ã€ã ãŸãŒã³ã®åœ±é¿ãé¿ãããå Žåã¯ã
DATETIME
åã䜿çšãããšããã§ãããã
NOW()
ãããã©ã«ãå€ã«èšå®ã§ããªãçç±
Q: NOW()
ãããã©ã«ãå€ã«èšå®ããããšãããšãšã©ãŒã«ãªããŸãããªãã§ããïŒ
A: NOW()
ã¯é¢æ°ã§ãããMySQLã§ã¯ ããã©ã«ãå€ãšããŠé¢æ°ã䜿çšã§ããªã ãšããå¶çŽããããŸãã
ãšã©ãŒäŸ
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event VARCHAR(255),
created_at DATETIME DEFAULT NOW()
);
ERROR 1067 (42000): Invalid default value for 'created_at'
â 解決ç
代ããã« CURRENT_TIMESTAMP
ã䜿çšããŸãããã
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ãŸãã¯ãããªã¬ãŒãäœ¿çš ããæ¹æ³ããããŸãã
CREATE TRIGGER set_created_at BEFORE INSERT ON logs
FOR EACH ROW
SET NEW.created_at = NOW();
BETWEEN
ã䜿ã£ãç¯å²æå®ãããŸããããªãå Žåã®å¯ŸåŠæ³
Q: BETWEEN
ã䜿ã£ãŠç¹å®ã®ç¯å²ã®ããŒã¿ãååŸããããšããããæ£ããåäœããŸããã
A: BETWEEN
ã䜿ãéã« ããŒã¿åã®éããæå»ã®åãæšãŠ ãªã©ãåå ã§äºæ³éãã®çµæã«ãªããªãããšããããŸãã
(1) BETWEEN
ã®æ£ããäœ¿ãæ¹
ããšãã°ãã2025幎2æ1æ¥ãã2æ10æ¥ãŸã§ã®ããŒã¿ãååŸãããå ŽåïŒ
SELECT * FROM orders WHERE order_date BETWEEN '2025-02-01 00:00:00' AND '2025-02-10 23:59:59';
ãã€ã³ã
BETWEEN '2025-02-01' AND '2025-02-10'
ã®ããã« æå»ãçç¥ãããš 00:00:00 ã§å€å®ããã ãããæå³ããªãçµæã«ãªãããšãããã23:59:59
ãæç€ºçã«æå®ãããšãæ¥ä»ã®çµãããŸã§æ£ããç¯å²æå®ã§ããã
SYSDATE()
ã䜿ãã¹ãã±ãŒã¹ãšäœ¿ããªãã»ããããã±ãŒã¹
Q: SYSDATE()
㯠NOW()
ãšäœãéãã®ïŒ ã©ããªãšãã«äœ¿ãã¹ãïŒ
A: SYSDATE()
㯠NOW()
ã«äŒŒãŠããŸãããã¯ãšãªã®å®è¡æç¹ã§ã¯ãªããè©äŸ¡ãããã¿ã€ãã³ã°ã®æå»ãååŸ ãããšããç¹ãç°ãªããŸãã
(1) NOW()
ã®å Žå
SELECT NOW(), SLEEP(2), NOW();
åºå
+---------------------+----------+---------------------+
| NOW() | SLEEP(2) | NOW() |
+---------------------+----------+---------------------+
| 2025-02-23 14:00:00 | 0 | 2025-02-23 14:00:00 |
+---------------------+----------+---------------------+
(2) SYSDATE()
ã®å Žå
SELECT SYSDATE(), SLEEP(2), SYSDATE();
åºå
+---------------------+----------+---------------------+
| SYSDATE() | SLEEP(2) | SYSDATE() |
+---------------------+----------+---------------------+
| 2025-02-23 14:00:00 | 0 | 2025-02-23 14:00:02 |
+---------------------+----------+---------------------+
â
SYSDATE()
ã䜿ãã¹ãã±ãŒã¹
- ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§ãåã¯ãšãªã®å®è¡æå»ãå³å¯ã«èšé²ãããå Žåã
- ãã°ããªã¢ã«ã¿ã€ã ããŒã¿ãèšé²ããéãæ£ç¢ºãªã¿ã€ãã³ã°ãæ±ããå Žåã
ãŸãšã
NOW()
ãšCURRENT_TIMESTAMP
ã¯ã»ãŒåãã ããTIMESTAMP
åã§äœ¿çšãããªãCURRENT_TIMESTAMP
ã䟿å©ãBETWEEN
ã§æ¥ä»ç¯å²ãæå®ããéã¯23:59:59
ãŸã§å«ããããšãSYSDATE()
ã¯ãªã¢ã«ã¿ã€ã ã®æå»ãå¿ èŠãªå Žé¢ã§æŽ»çšãããšäŸ¿å©ã
9. ãŸãšã
ãããŸã§ã®ã»ã¯ã·ã§ã³ã§ãMySQLã§çŸåšæå»ãååŸã»æäœã»ç®¡çããæ¹æ³ ã詳ãã解説ããŠããŸããããã®æçµã»ã¯ã·ã§ã³ã§ã¯ãåãã€ã³ããæ¯ãè¿ããMySQLã§çŸåšæå»ãé©åã«æ±ãããã®éèŠãªãã€ã³ããæŽçããŸãã
MySQLã®çŸåšæå»ãååŸããæ¹æ³ãŸãšã
颿°å | ååŸã§ããããŒã¿ | ååŸã¿ã€ãã³ã° | äž»ãªçšé |
---|---|---|---|
NOW() | YYYY-MM-DD HH:MM:SS | ã¯ãšãªå®è¡æ | äžè¬çãªçŸåšæå»ååŸ |
SYSDATE() | YYYY-MM-DD HH:MM:SS | ã¯ãšãªè©äŸ¡æ | ãªã¢ã«ã¿ã€ã ã®æå»ååŸ |
CURDATE() | YYYY-MM-DD | ã¯ãšãªå®è¡æ | çŸåšã®æ¥ä»ã®ã¿ååŸ |
CURTIME() | HH:MM:SS | ã¯ãšãªå®è¡æ | çŸåšã®æéã®ã¿ååŸ |
CURRENT_TIMESTAMP | YYYY-MM-DD HH:MM:SS | ã¯ãšãªå®è¡æ | NOW() ãšã»ãŒåã |
UTC_TIMESTAMP() | YYYY-MM-DD HH:MM:SS (UTC) | ã¯ãšãªå®è¡æ | UTCã®çŸåšæå»ãååŸ |
â
NOW()
ãæãäžè¬çã«äœ¿çšãããããçšéã«å¿ããŠä»ã®é¢æ°ã掻çšã§ããïŒ
çŸåšæå»ã®ãã©ãŒããããšæäœ
ååŸããæå»ã èŠããã圢åŒã«æŽããããç¹å®ã®éšåã®ã¿ååŸãã ããšãéèŠã§ãã
DATE_FORMAT()
ã䜿ã£ãŠãã©ãŒããã
SELECT DATE_FORMAT(NOW(), '%Y幎%mæ%dæ¥ %H:%i:%s');
åºå
2025幎02æ23æ¥ 14:35:00
- æ¥ä»ã»æééšåã®ã¿ãååŸ
SELECT CURDATE(), CURTIME();
åºå
+------------+----------+
| 2025-02-23 | 14:35:00 |
+------------+----------+
çŸåšæå»ãçšããèšç®
INTERVAL
ã䜿ã£ãŠæéãå ç®ã»æžç®
SELECT NOW() + INTERVAL 1 HOUR; -- 1æéåŸ
SELECT NOW() - INTERVAL 3 DAY; -- 3æ¥å
- æ¥æ°ã®å·®ãæ±ãã
SELECT DATEDIFF('2025-03-01', '2025-02-23');
åºå
6æ¥
- æéã®å·®ãæ±ãã
SELECT TIMESTAMPDIFF(HOUR, '2025-02-23 12:00:00', '2025-02-23 18:30:00');
åºå
6æé
ã¿ã€ã ãŸãŒã³ã®ç®¡ç
- çŸåšã®ã¿ã€ã ãŸãŒã³ã確èª
SELECT @@global.time_zone, @@session.time_zone;
- ã»ãã·ã§ã³åäœã§ã¿ã€ã ãŸãŒã³ã倿Ž
SET time_zone = 'Asia/Tokyo';
- ç°ãªãã¿ã€ã ãŸãŒã³ã®å€æ
SELECT CONVERT_TZ('2025-02-23 05:35:00', 'UTC', 'Asia/Tokyo');
åºå
2025-02-23 14:35:00
çŸåšæå»ãããã©ã«ãå€ãšããŠèšå®
- ã¬ã³ãŒãäœææã®æ¥æãèªåèšé²
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- æŽæ°æã«
updated_at
ãèªåæŽæ°
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
MySQLã®çŸåšæå»ã®å®çšäŸ
- ãã°èšé²
INSERT INTO system_logs (event_type, message)
VALUES ('ERROR', 'ãµãŒããŒæ¥ç¶ã«å€±æããŸãã');
- éå»24æé以å ã®ããŒã¿ãååŸ
SELECT * FROM users WHERE created_at >= NOW() - INTERVAL 1 DAY;
- æçµãã°ã€ã³æå»ã®æŽæ°
UPDATE users SET last_login = NOW() WHERE id = 1;
- äžå®æéå ã®ããŒã¿ãååŸ
SELECT * FROM orders WHERE order_date BETWEEN '2025-02-01' AND '2025-02-15';
次ã«ããã¹ãããš
- MySQLã§çŸåšæå»ãååŸããSQLã詊ããŠã¿ãïŒ
SELECT NOW();
ãªã©ïŒ - æ¥ä»ã®èšç®ããã©ãŒãããã䜿ã£ãŠãå®éã«SQLãçµã¿ç«ãŠãŠã¿ã
- å®éã®ã¢ããªã±ãŒã·ã§ã³ã«é©çšããïŒãã°èšé²ããŠãŒã¶ãŒç®¡çãªã©ïŒ
ç·æ¬
â
NOW()
ã CURRENT_TIMESTAMP
ã䜿ãã° ç°¡åã«çŸåšæå»ãååŸ ã§ãã
â
DATE_FORMAT()
ãæŽ»çšããã° æå»ãèŠããã圢åŒã«å€æ ã§ãã
â
INTERVAL
ã DATEDIFF()
ã䜿ããš æ¥ä»ã»æéã®èšç® ãå¯èœ
â
TIMESTAMP
åã䜿ãã° äœææ¥æã»æŽæ°æ¥æãèªåèšé² ã§ãã
â
ã¿ã€ã ãŸãŒã³ã®ç®¡çãé©åã«è¡ãããšã§ ç°ãªãå°åã®æå»ãæ£ããæ±ãã
MySQLã§çŸåšæå»ãé©åã«æ±ãããšã¯ããã°ç®¡çã»ããŒã¿éèšã»ãã©ã³ã¶ã¯ã·ã§ã³åŠç ãªã©ãããããå Žé¢ã§éèŠã§ããæ¬èšäºã§åŠãã å å®¹ãæŽ»çšããããå¹ççãªããŒã¿ããŒã¹éçšãå®çŸããŠãã ããïŒ