Jenis hari lahir yang tersedia dalam mysql: 1. Jenis DATE, format tarikh yang boleh diwakili ialah "YYYY-MM-DD", yang memerlukan 3 bait untuk penyimpanan 2. Jenis DATETIME, format tarikh yang boleh diwakili Ia ialah "YYYY-MM-DD HH:MM:SS", yang memerlukan 8 bait apabila menyimpan 3. Jenis TIMESTAMP, format tarikh yang boleh dinyatakan ialah "YYYY-MM-DD HH:MM:SS" , apabila menyimpan Memerlukan 4 bait.
Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.
Jenis tarikh dan masa sesuai untuk hari lahir dalam MySQL
类型名称 | 日期格式 | 日期范围 | 存储需求 |
---|---|---|---|
DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-3 | 3 个字节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8 个字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC | 4 个字节 |
Jenis TARIKH
Jenis TARIKH digunakan apabila hanya nilai tarikh diperlukan, tanpa bahagian masa dan memerlukan 3 bait untuk storan. Format tarikh ialah 'YYYY-MM-DD', di mana YYYY mewakili tahun, MM mewakili bulan dan DD mewakili hari.
Apabila memberikan nilai kepada medan jenis DATE, anda boleh menggunakan jenis rentetan atau sisipan data jenis angka, selagi ia mematuhi format tarikh DATE. Seperti yang ditunjukkan di bawah:
Tarikh yang dinyatakan dalam format aksara 'YYYY-MM-DD' atau 'YYYYMMDD', julat nilai ialah '1000-01-01'~'9999 - 12-3'. Sebagai contoh, masukkan '2015-12-31' atau '20151231', dan tarikh yang dimasukkan ke dalam pangkalan data ialah 2015-12-31.
Mewakili tarikh dalam format rentetan 'YY-MM-DD' atau 'YYMMDD', dengan YY mewakili nilai tahun dua digit. MySQL mentafsir peraturan untuk nilai tahun dua digit: nilai tahun dalam julat '00~69' ditukar kepada '2000~2069', dan nilai tahun dalam julat '70~99' ditukar kepada '1970~1999'. Sebagai contoh, jika anda memasukkan '15-12-31', tarikh yang dimasukkan ke dalam pangkalan data ialah 2015-12-31 jika anda memasukkan '991231', tarikh yang dimasukkan ke dalam pangkalan data ialah 1999-12-31;
Tarikh dinyatakan dalam format angka YYMMDD, serupa dengan yang sebelumnya, nilai tahun dalam julat 00~69 ditukar kepada 2000~2069, dan nilai tahun dalam julat 80~99 ditukar kepada 1980~1999. Sebagai contoh, jika anda memasukkan 151231, tarikh yang dimasukkan ke dalam pangkalan data ialah 2015-12-31, dan jika anda memasukkan 991231, tarikh yang dimasukkan ke dalam pangkalan data ialah 1999-12-31.
Gunakan CURRENT_DATE atau NOW() untuk memasukkan tarikh sistem semasa.
Petua: MySQL membenarkan sintaks "santai": sebarang tanda baca boleh digunakan sebagai pemisah antara bahagian tarikh. Sebagai contoh, '98-11-31', '98.11.31', '98/11/31' dan '98@11@31' adalah setara dan nilai ini akan dimasukkan ke dalam pangkalan data dengan betul.
Jenis DATETIME
Jenis DATETIME digunakan untuk nilai yang perlu mengandungi maklumat tarikh dan masa serta memerlukan 8 bait untuk storan. Format tarikh ialah 'YYYY-MM-DD HH:MM:SS', dengan YYYY mewakili tahun, MM mewakili bulan, DD mewakili hari, HH mewakili jam, MM mewakili minit dan SS mewakili detik.
Apabila memberikan nilai kepada medan jenis DATETIME, anda boleh menggunakan jenis rentetan atau sisipan data jenis angka, selagi ia mematuhi format tarikh DATETIME, seperti ditunjukkan di bawah:
Tarikh dinyatakan dalam format rentetan 'YYYY-MM-DD HH:MM:SS' atau 'YYYYMMDDHHMMSS', julat nilai ialah '1000-01-01 00:00:00'~'9999-12- 3 23 :59:59'. Sebagai contoh, jika anda memasukkan '2014-12-31 05:05:05' atau '20141231050505', nilai DATETIME yang dimasukkan ke dalam pangkalan data ialah 2014-12-31 05:05:05.
Tarikh yang diwakili dalam format rentetan 'YY-MM-DD HH:MM:SS' atau 'YYMMDDHHMMSS', dengan YY mewakili nilai tahun dua digit. Sama seperti sebelumnya, nilai tahun dalam julat '00~79' ditukar kepada '2000~2079', dan nilai tahun dalam julat '80~99' ditukar kepada '1980~1999'. Sebagai contoh, jika anda memasukkan '14-12-31 05:05:05', DATETIME yang dimasukkan ke dalam pangkalan data ialah 2014-12-31 05:05:05 jika anda memasukkan 141231050505, DATETIME yang dimasukkan ke dalam pangkalan data ialah 2014; -12-31 05:05:05 .
Tarikh dan masa dalam format angka YYYYMMDDHHMMSS atau YYMMDDHHMMSS. Sebagai contoh, jika anda memasukkan 20141231050505, DATETIME yang dimasukkan ke dalam pangkalan data ialah 2014-12-31 05:05:05 jika anda memasukkan 140505050505, DATETIME yang dimasukkan ke dalam pangkalan data ialah 2014-12-31:05.
Petua: MySQL membenarkan sintaks "santai": sebarang tanda baca boleh digunakan sebagai pemisah antara bahagian tarikh atau bahagian masa. Contohnya, '98-12-31 11:30:45', '98.12.31 11 30 35', '98/12/31 11*30*45' dan '98@12@31 11^30^45' adalah Setara, nilai-nilai ini boleh dimasukkan dengan betul ke dalam pangkalan data.
Jenis TIMESTAMP
Format paparan TIMESTAMP adalah sama dengan DATETIME, lebar paparan ditetapkan pada 19 aksara dan format tarikh ialah YYYY- MM-DD HH:MM :SS, memerlukan 4 bait untuk storan. Walau bagaimanapun, julat nilai lajur TIMESTAMP adalah lebih kecil daripada julat nilai DATETIME, iaitu '1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07'UTC. Apabila memasukkan data, pastikan ia berada dalam julat nilai yang sah.
Petua: Waktu Sejagat Selaras (Bahasa Inggeris: Waktu Sejagat Selaras, Bahasa Perancis: Temps Universel Coordonné) juga dikenali sebagai Waktu Bersatu Dunia, Waktu Piawai Dunia dan Waktu Selaras Antarabangsa. Singkatan Bahasa Inggeris (CUT) dan Perancis (TUC) adalah berbeza, dan sebagai kompromi, singkatan itu ialah UTC.
TIMESTAMP dan DATETIME, sebagai tambahan kepada bait storan yang berbeza dan julat yang disokong, perbezaan terbesar ialah:
DATETIME Apabila menyimpan data tarikh, Ia disimpan dalam format input sebenar, iaitu, apa sahaja yang dimasukkan disimpan, tanpa mengira zon waktu
Nilai TIMESTAMP disimpan dalam format UTC (Universal Standard Time) dan disimpan dalam format yang betul Tukar kepada zon waktu semasa, dan kemudian tukar kembali ke zon waktu semasa apabila mendapatkan semula. Iaitu, apabila membuat pertanyaan, nilai masa yang dipaparkan adalah berbeza bergantung pada zon waktu semasa.
Petua: Jika anda menetapkan nilai DATE kepada objek DATETIME atau TIMESTAMP, bahagian masa nilai yang terhasil ditetapkan kepada '00:00:00', jadi nilai DATE mengandungi tiada maklumat masa. Jika objek DATE diberikan nilai DATETIME atau TIMESTAMP, bahagian masa nilai yang terhasil akan dialih keluar, jadi nilai DATE tidak mengandungi maklumat masa.
Fungsi masa dan tarikh
Fungsi masa sistem sekarang(), current_timestamp, sysdate ()
Ketiga-tiga fungsi ini semuanya boleh mengembalikan masa sistem untuk melihat perbezaannya Mengakses ketiga-tiga fungsi ini pada masa yang sama akan mendapat hasil yang sama, tetapi biarkan ia menunggu beberapa saat selepas itu, hasilnya berbeza.
Rajah di atas menunjukkan bahawa masa yang dikembalikan oleh sysdate() adalah berbeza daripada sekarang(), current_timestamp, iaitu 2 saat lebih perlahan Sebabnya adalah seperti berikut:
current_timestamp kini adalah Sinonim, kedua-duanya sebenarnya sama; ;
tarikh_tambah(tarikh, unit expr selang) dan date_sub( tarikh, unit expr selang) masing-masing mewakili peningkatan dan penurunan.
Bagaimana untuk mengendalikan date_add apabila menghadapi bulan lompat, MySQL mengembalikan tarikh 29 Februari jika ia adalah bulan lompat, dan 28 Februari jika ia bukan bulan lompat.select date_add('2017-12-18 22:51:00', interval 1 second), date_add('2017-12-18 22:51:00', interval 1 minute), date_add('2017-12-18 22:51:00', interval 1 hour), date_add('2017-12-18 22:51:00', interval 1 day), date_add('2017-12-18 22:51:00', interval 1 month), date_add('2017-12-18 22:51:00', interval 1 year);
select date_add('2016-02-29 22:51:00', interval -1 year), date_add('2016-02-29 22:51:00', interval 4 year);
2015-02-28 22:51:002020-02-29 22:51:00
③ peningkatan cap masa, penurunan, fungsi penukaran
timestamp(date)
timestamp(date, time)
timestampadd(unit,interval,datetime_expr)
select timestampadd(second, 60, '2017-12-18 00:00:00'); select timestampadd(minute, 60, '2017-12-18 00:00:00'); select timestampadd(hour, 60, '2017-12-18 00:00:00');
timestampdiff(unit,datetime_expr1,datetime_expr2)
select timestampdiff(second, '2017-12-18 00:00:00','2017-12-18 12:00:00'); select timestampdiff(hour, '2017-11-18 00:00:00','2017-12-18 12:00:00'); select timestampdiff(day, '2017-10-17 00:00:00','2017-11-18 23:00:00');
date_format adalah untuk memformat tarikh
Nota: Jika anda menggunakan fungsi ini pada medan tarikh semasa menanya data, pengoptimum tidak akan menggunakan indeks medan, ia juga tidak boleh digunakan melalui data pertanyaan, jadi kecekapan pertanyaan akan menjadi sangat rendah Sebagai contoh, dalam pernyataan pertanyaan berikut, jika tarikh lahir medan mempunyai indeks, indeks akan menjadi tidak sah kerana fungsi format_date digunakan.select date_format(now(),'%Y%m%d'), date_format(now(),'%Y-%m-%d'), date_format(now(),'%Y/%m/%d'), date_format(now(),'%m/%d/%Y');
select * from employees where date_format(birth_date,'%Y-%m-%d') = '1961-08-03';
Soalan tarikh pengaturcaraan klasikKira hari lahir terbaharu (termasuk yang lalu dan akan datang) pengguna berdasarkan tarikh lahir dan tarikh semasa
[Cadangan berkaitan :-- 上一年,当年,下一年生日与当前时间差最小的年就是用户最近的生日 select emp_no,first_name,last_name,birth_date,today,if(last_diff<=cur_diff and last_diff<=next_diff, last,if(cur_diff from ( -- 计算当前时间与上一年,当年,下一年生日的时间差 select emp_no,first_name,last_name,birth_date,datediff(today,last) as last_diff,abs(datediff(today,cur)) as cur_diff,abs(datediff(today,next)) as next_diff, last,cur,next,today from ( -- 用户最近的生日可能分布在前一年,当年,下一年。根据年度差year_diff计算上一年,当年,下一年用户的生日 select emp_no,first_name,last_name,birth_date, DATE_ADD(birth_date,INTERVAL year_diff year) as cur, DATE_ADD(birth_date,INTERVAL year_diff+1 year) as next, DATE_ADD(birth_date,INTERVAL year_diff-1 year) as last, today from ( -- 获取当前事前与出生日期的年度差 year_diff select emp_no,first_name,last_name,birth_date,(year(NOW())-year(birth_date)) as year_diff, NOW() as today from employees ) a ) b ) c
Atas ialah kandungan terperinci Apakah jenis yang digunakan untuk hari lahir dalam mysql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!