mysql日付に関する知識点と関数


mysql日付に関する知識点と関数
一:mysqlにおける日付データ型間の相互付与による影響
ある程度、日付タイプの値を異なる日付タイプのオブジェクトに割り当てることができます.しかし、これはいくつかの変更や情報の損失に値する可能性があります.
DATETIMEまたはTIMESTAMPオブジェクトにDATE値を割り当てると、DATE値に時間情報が含まれないため、結果値の時間部分が「00:00:00」に設定されます.
DATETIMEまたはTIMESTAMP値をDATEオブジェクトに割り当てると、DATEタイプは時間情報を格納しないため、結果値の時間部分が削除されます.
例:
 
   
   
   
   
  1. mysql> desc datetime_val; 
  2. +-------+----------+------+-----+---------+----------------+ 
  3. | Field | Type     | Null | Key | Default | Extra          | 
  4. +-------+----------+------+-----+---------+----------------+ 
  5. | id    | int(11)  | NO   | PRI | NULL    | auto_increment |  
  6. | dt    | datetime | YES  |     | NULL    |                |  
  7. +-------+----------+------+-----+---------+----------------+ 
  8. 2 rows in set (0.00 sec) 
  9.   
  10. mysql> desc timestamp_val; 
  11. +-------+-----------+------+-----+-------------------+-----------------------------+ 
  12. | Field | Type      | Null | Key | Default           | Extra                       | 
  13. +-------+-----------+------+-----+-------------------+-----------------------------+ 
  14. | id    | int(11)   | NO   | PRI | NULL              | auto_increment              |  
  15. | ts    | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |  
  16. +-------+-----------+------+-----+-------------------+-----------------------------+ 
  17. 2 rows in set (0.00 sec) 
  18.   
  19. mysql> select * from timestamp_val; 
  20. Empty set (0.00 sec) 
  21. mysql> insert into timestamp_val(select * from datetime_val); 
  22. Query OK, 4 rows affected, 1 warning (0.00 sec) 
  23. Records: 4  Duplicates: 0  Warnings: 1 
  24. mysql> select * from timestamp_val; 
  25. +----+---------------------+ 
  26. | id | ts                  | 
  27. +----+---------------------+ 
  28. |  1 | 0000-00-00 00:00:00 |  
  29. |  2 | 1987-03-05 12:30:15 |  
  30. |  3 | 1999-12-31 09:00:00 |  
  31. |  4 | 2000-06-04 15:45:30 |  
  32. +----+---------------------+ 
  33. 4 rows in set (0.00 sec) 

注意:日付データ型間で値を割り当てる場合は、時間精度が損なわれる可能性があることに注意してください.
二:mysql日付データ型間の変換
 
   
   
   
   
  1. mysql , 
  2. left(),right(),mid(),substring(),substring_index(),concat , --> 。 
  3.   
  4.  
  5. DATE_FORMAT() ,TIME_FORMAT(),STR_TO_DATE()  。 
  6. DATE_FORMAT(date_col,'format') 
  7. date_col :  
  8. format:  
  9. %Y:       4  
  10. %y:       2  
  11. %M:    (january-December) 
  12. %m:        (01..12) 
  13. %b:       
  14. %c:      , (1..12) 
  15. %r       ,12   AM PM  
  16. %T       ,24  
  17.   
  18. date_format,time_format,str_to_date()  , 。 
  19. to_days() from_days() 。 
  20. to_days()  
  21. from_days()  。 
  22.  
   
   
   
   
  1. mysql> select dt,to_days(dt) from datetime_val; 
  2. +---------------------+-------------+ 
  3. | dt                  | to_days(dt) | 
  4. +---------------------+-------------+ 
  5. | 1970-01-01 00:00:00 |      719528 |  
  6. | 1987-03-05 12:30:15 |      725800 |  
  7. | 1999-12-31 09:00:00 |      730484 |  
  8. | 2000-06-04 15:45:30 |      730640 |  
  9.   
  10. mysql> select dt, from_days(to_days(dt)) from datetime_val; 
  11. +---------------------+------------------------+ 
  12. | dt                  | from_days(to_days(dt)) | 
  13. +---------------------+------------------------+ 
  14. | 1970-01-01 00:00:00 | 1970-01-01             |  
  15. | 1987-03-05 12:30:15 | 1987-03-05             |  
  16. | 1999-12-31 09:00:00 | 1999-12-31             |  
  17. | 2000-06-04 15:45:30 | 2000-06-04             |  
  18. +---------------------+------------------------+ 
  19.   
  20. datetime timestamp  
  21.   
  22. timestamp 1970 -2037  
  23. unix_timestamp() from_unixtime()   1970 。 
  24. timestamp datetime ,  
  25.  
  26.   
  27. mysql> select dt,unix_timestamp(dt) from datetime_val; 
  28. +---------------------+--------------------+ 
  29. | dt                  | unix_timestamp(dt) | 
  30. +---------------------+--------------------+ 
  31. | 1970-01-01 00:00:00 |                  0 |  
  32. | 1987-03-05 12:30:15 |          541917015 |  
  33. | 1999-12-31 09:00:00 |          946602000 |  
  34. | 2000-06-04 15:45:30 |          960104730 |  
  35. +---------------------+--------------------+ 
  36. 4 rows in set (0.00 sec) 
  37.   
  38. mysql> select dt,unix_timestamp(dt),from_unixtime(unix_timestamp(dt)) from datetime_val; 
  39. +---------------------+--------------------+-----------------------------------+ 
  40. | dt                  | unix_timestamp(dt) | from_unixtime(unix_timestamp(dt)) | 
  41. +---------------------+--------------------+-----------------------------------+ 
  42. | 1970-01-01 00:00:00 |                  0 | 1970-01-01 08:00:00               |  
  43. | 1987-03-05 12:30:15 |          541917015 | 1987-03-05 12:30:15               |  
  44. | 1999-12-31 09:00:00 |          946602000 | 1999-12-31 09:00:00               |  
  45. | 2000-06-04 15:45:30 |          960104730 | 2000-06-04 15:45:30               |  
  46. +---------------------+--------------------+-----------------------------------+ 
  47. 4 rows in set (0.01 sec) 

 

    
    
    
    
  1.  :
  2.  
  3. mysql datediff,timediff,timstampdiff
  • DATEDIFF()
  • は、date-and-dateまたはdate-and-timeタイプのデータとして することができるが、 に 、すなわちdatediff() を して
  • を することができる.
  • の2つのdate,datetime,timestampタイプ の の . 
  • :datadiff(date 1,date 2)は、date 1-date 2 の 、
  • を す.
  •  
  • TIMEDIFF()
  • は、2つのtimeタイプ の
  • を することができる.
  • で するパラメータは、timeタイプまたはdate-timeタイプです. :2つのパラメータタイプが じ
  • であることを します.
  •  
  • timediff(time 1,time 2)は、time 1-time 2 の
  • を す.
  •  
  • timestampdiff()
  • :timestampdiff(unit,val_1,val_2)
  • unit: year,month,day,hour,minute,second,frac_second
  • えば
  • mysql> set @t1='2020-12-12 14:14:14',@t2='2012-11-11 14:50:50'; 
  • Query OK, 0 rows affected (0.00 sec) 
  •  
  • mysql> select timestampdiff(year,@t2,@t1)as year,timestampdiff(month,@t2,@t1)as month,timestampdiff(day,@t2,@t1)as days; 
  • +------+-------+------+ 
  • | year | month | days | 
  • +------+-------+------+ 
  • |    8 |    97 | 2952 |  
  • +------+-------+------+ 
  • 1 row in set (0.00 sec) 
  •  
  • :val_の 1 valより きい2は の を します.これはdatediff()、timediff()のパラメータ と り の とは です. 
  • パラメータの は、 に なくtimestampタイプ の を けず、timestampタイプの を えることができます. 
  •       mysql5.0 のバージョンでは、この がサポートされません. 
  •    
       
       
       
    1.  :  
    2. mysql  
    3. addtime(t1,t2)  
    4. timestamp()  
    5.  
    6. mysql> set @d1='1997-07-01 12:00:00' ,@t='12:00:00'
    7.         Query OK, 0 rows affected (0.00 sec) 
    8.  
    9. mysql> select timestamp(@d1,@t); 
    10. +---------------------+ 
    11. | timestamp(@d1,@t)   | 
    12. +---------------------+ 
    13. | 1997-07-02 00:00:00 |  
    14. +---------------------+ 
    15. 1 row in set (0.01 sec) 
    16.   
    17. mysql date_add() date_sub()  
    18.  
    19. date_add(date,interval val unit)        
    20. date_sub(date,interval val unit)      
    21. date:  
    22. : 
    23. mysql> select * from date_val; 
    24. +------+------------+ 
    25. | id   | d          | 
    26. +------+------------+ 
    27. |    1 | 1864-02-28 |  
    28. |    2 | 1900-01-15 |  
    29. |    3 | 1987-03-05 |  
    30. |    4 | 1999-12-31 |  
    31. |    5 | 2000-06-04 |  
    32. +------+------------+ 
    33. 5 rows in set (0.00 sec) 
    34.  
    35. mysql> select d,date_add(d,interval 7 day) from date_val; 
    36. +------------+----------------------------+ 
    37. | d          | date_add(d,interval 7 day) | 
    38. +------------+----------------------------+ 
    39. | 1864-02-28 | 1864-03-06                 |  
    40. | 1900-01-15 | 1900-01-22                 |  
    41. | 1987-03-05 | 1987-03-12                 |  
    42. | 1999-12-31 | 2000-01-07                 |  
    43. | 2000-06-04 | 2000-06-11                 |  
    44. +------------+----------------------------+ 
    45. 5 rows in set (0.00 sec) 
    46.  
    47. mysql> select d,date_sub(d,interval 7 day) from date_val; 
    48. +------------+----------------------------+ 
    49. | d          | date_sub(d,interval 7 day) | 
    50. +------------+----------------------------+ 
    51. | 1864-02-28 | 1864-02-21                 |  
    52. | 1900-01-15 | 1900-01-08                 |  
    53. | 1987-03-05 | 1987-02-26                 |  
    54. | 1999-12-31 | 1999-12-24                 |  
    55. | 2000-06-04 | 2000-05-28                 |  
    56. +------------+----------------------------+ 
    57. 5 rows in set (0.00 sec) 
    58. : mysql5.0 , 1 week 7 day, datetime , date
    59. unti :hour_minute,day_hour
    60. mysql> select d,date_add(d,interval '3 4' day_hour) from date_val; +------------+-------------------------------------+ | d | date_add(d,interval '3 4' day_hour) | +------------+-------------------------------------+ | 1864-02-28 | 1864-03-02 04:00:00 | | 1900-01-15 | 1900-01-18 04:00:00 | | 1987-03-05 | 1987-03-08 04:00:00 | | 1999-12-31 | 2000-01-03 04:00:00 | | 2000-06-04 | 2000-06-07 04:00:00 |
    61. : --OVER
    62. mysql , , 。 , 。