Rumah pangkalan data tutorial mysql [MySQL]--)查询5天之内过生日的同事中的跨年问题的解决过程_MySQL

[MySQL]--)查询5天之内过生日的同事中的跨年问题的解决过程_MySQL

Jun 01, 2016 pm 01:02 PM
hari jadi proses

前言:

遇到朋友提问,如下:

SELECT * FROM ali_users WHERE DATEDIFF(CAST(CONCAT(DATE_FORMAT(NOW(),'%y'),DATE_FORMAT(birthday,'-%m-%d'))AS DATE),CAST(DATE_FORMAT(NOW(),'%y-%m-%d') AS DATE))
1,准备测试数据,需要包含跨年的数据

1.1,准备测试数据的SQL

USE test;
DROP TABLE IF EXISTS ali_users;
CREATE TABLE ali_users (username VARCHAR(10),birthday DATE NOT NULL,iphone VARCHAR(16));
INSERT INTO ali_users SELECT \'MaoYi\',\'1985-09-04\',\'13998786543\' UNION ALL
SELECT \'LiuEr\',\'1985-08-30\',\'13998786543\' UNION ALL
SELECT \'ZhangSan\',\'1981-01-01\',\'13998786543\' UNION ALL
SELECT \'LiSi\',\'1983-01-02\',\'13998786543\' UNION ALL
SELECT \'WangWu\',\'1984-11-01\',\'13998786543\' UNION ALL
SELECT \'ZhaoLiu\',\'1984-11-01\',\'13998786543\' UNION ALL
SELECT \'SongQi\',\'1986-08-31\',\'13998786543\' UNION ALL
SELECT \'HuangBa\',\'1989-09-01\',\'13998786543\' UNION ALL
SELECT \'ZengJiu\',\'1989-09-02\',\'13998786543\' UNION ALL
SELECT \'LuoShi\',\'1985-09-03\',\'13998786543\' UNION ALL
SELECT \'Tom\',\'1995-09-05\',\'13998786543\' UNION ALL
SELECT \'Licy\',\'1991-12-30\',\'13998286543\' UNION ALL
SELECT \'Cari\',\'1992-12-31\',\'13998286543\' UNION ALL
SELECT \'Mark\',\'1992-01-03\',\'13998286543\' UNION ALL
SELECT \'Ruby\',\'1992-01-04\',\'13998286547\';
1.2,在数据库命令行执行SQL

mysql> USE test;
DATABASE CHANGED
mysql> DROP TABLE IF EXISTS ali_users;
QUERY OK, 0 ROWS affected (0.00 sec)

mysql> CREATE TABLE ali_users (username VARCHAR(10),birthday DATE NOT NULL,iphone VARCHAR(16));
QUERY OK, 0 ROWS affected (0.01 sec)

mysql> INSERT INTO ali_users SELECT \'MaoYi\',\'1985-09-04\',\'13998786543\' UNION ALL
-> SELECT \'LiuEr\',\'1985-08-30\',\'13998786543\' UNION ALL
-> SELECT \'ZhangSan\',\'1981-01-01\',\'13998786543\' UNION ALL
-> SELECT \'LiSi\',\'1983-01-02\',\'13998786543\' UNION ALL
-> SELECT \'WangWu\',\'1984-11-01\',\'13998786543\' UNION ALL
-> SELECT \'ZhaoLiu\',\'1984-11-01\',\'13998786543\' UNION ALL
-> SELECT \'SongQi\',\'1986-08-31\',\'13998786543\' UNION ALL
-> SELECT \'HuangBa\',\'1989-09-01\',\'13998786543\' UNION ALL
-> SELECT \'ZengJiu\',\'1989-09-02\',\'13998786543\' UNION ALL
-> SELECT \'LuoShi\',\'1985-09-03\',\'13998786543\' UNION ALL
-> SELECT \'Tom\',\'1995-09-05\',\'13998786543\' UNION ALL
-> SELECT \'Licy\',\'1991-12-30\',\'13998286543\' UNION ALL
-> SELECT \'Cari\',\'1992-12-31\',\'13998286543\' UNION ALL
-> SELECT \'Mark\',\'1992-01-03\',\'13998286543\' UNION ALL
-> SELECT \'Ruby\',\'1992-01-04\',\'13998286547\';
QUERY OK, 15 ROWS affected (0.01 sec)
Records: 15 Duplicates: 0 WARNINGS: 0

mysql> SELECT * FROM ali_users;
+----------+------------+-------------+
| username | birthday | iphone |
+----------+------------+-------------+
| MaoYi | 1985-09-04 | 13998786543 |
| LiuEr | 1985-08-30 | 13998786543 |
| ZhangSan | 1981-01-01 | 13998786543 |
| LiSi | 1983-01-02 | 13998786543 |
| WangWu | 1984-11-01 | 13998786543 |
| ZhaoLiu | 1984-11-01 | 13998786543 |
| SongQi | 1986-08-31 | 13998786543 |
| HuangBa | 1989-09-01 | 13998786543 |
| ZengJiu | 1989-09-02 | 13998786543 |
| LuoShi | 1985-09-03 | 13998786543 |
| Tom | 1995-09-05 | 13998786543 |
| Licy | 1991-12-30 | 13998286543 |
| Cari | 1992-12-31 | 13998286543 |
| Mark | 1992-01-03 | 13998286543 |
| Ruby | 1992-01-04 | 13998286547 |
+----------+------------+-------------+
15 ROWS IN SET (0.00 sec)

mysql>
2,写出查询SQL
SELECT * FROM ali_users WHERE
2,1,跨年问题分析
因为跨年的时候生日字段通常月份比较小是1月,所以如果利用DATEDIFF来判断要与月份比较大12月来比较得到相差天数在N天之内的话,就需要YEAR(NOW())+1,当年年份+1再加上月份才能与NOW()比较得出真实的相差天数。
2.2,5天之内的设定
N天之内,用 BETWEEN 0 AND N 来判断,如果是5天之内(包含今天)那么N值就是4,就是 BETWEEN 0 AND 4
3,验证数据
比如提醒最近5天之内(包括今日)过生日的同事,生日快乐。
3.1,查询的数据都在今年之内的,比如今天是8月30日,那么需要执行的SQL如下:
SELECT * FROM ali_users WHERE
查询的结果应该是从今天8月30日到9月3日之间过生日的同事,包括LiuEr,SongQi,HuangBa,ZengJiu,LuoShi;

mysql> SELECT * FROM ali_users WHERE
-> DATEDIFF(CAST(CONCAT(YEAR(NOW()),DATE_FORMAT(birthday,\'-%m-%d\'))AS DATE),CAST(DATE_FORMAT(NOW(),\'%y-%m-%d\') AS DATE)) BETWEEN 0 AND 4
-> OR/* or后面的是捎带解决跨年问题*/
-> DATEDIFF(CAST(CONCAT(YEAR(NOW())+1,DATE_FORMAT(birthday,\'-%m-%d\'))AS DATE),CAST(DATE_FORMAT(NOW(),\'%y-%m-%d\') AS DATE)) BETWEEN 0 AND 4
-> ;
+----------+------------+-------------+
| username | birthday | iphone |
+----------+------------+-------------+
| LiuEr | 1985-08-30 | 13998786543 |
| SongQi | 1986-08-31 | 13998786543 |
| HuangBa | 1989-09-01 | 13998786543 |
| ZengJiu | 1989-09-02 | 13998786543 |
| LuoShi | 1985-09-03 | 13998786543 |
+----------+------------+-------------+
5 ROWS IN SET (0.00 sec)

mysql>
3.2,查询的生日有跨年的
比如今天是2013年12月30日,要查询5天之内过生日的同事,那么就有2013年的12月30日31日过生日的,也有2014年1月1日2日3日过生日的同事,因为今天是8月30日,所以要把Step#2中的SQL的NOW()改成'2013-12-30 00:10:10'来进行测试,SQL整理如下:
mysql> SELECT * FROM ali_users WHERE
-> DATEDIFF(CAST(CONCAT(YEAR(\'2013-12-30 00:10:10\'),DATE_FORMAT(birthday,\'-%m-%d\'))AS DATE),CAST(DATE_FORMAT(\'2013-12-30 00:10:10\',\'%y-%m-%d\') AS DATE)) BETWEEN 0 AND 4
-> OR/* or后面的是捎带解决跨年问题*/
-> DATEDIFF(CAST(CONCAT(YEAR(\'2013-12-30 00:10:10\')+1,DATE_FORMAT(birthday,\'-%m-%d\'))AS DATE),CAST(DATE_FORMAT(\'2013-12-30 00:10:10\',\'%y-%m-%d\') AS DATE)) BETWEEN 0 AND 4
-> ;
+----------+------------+-------------+
| username | birthday | iphone |
+----------+------------+-------------+
| ZhangSan | 1981-01-01 | 13998786543 |
| LiSi | 1983-01-02 | 13998786543 |
| Licy | 1991-12-30 | 13998286543 |
| Cari | 1992-12-31 | 13998286543 |
| Mark | 1992-01-03 | 13998286543 |
+----------+------------+-------------+
5 ROWS IN SET (0.00 sec)

mysql>
4,总结

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tiada Tempoh Hilang Pejabat Pembelian: Peranti siri kalendar dan hari jadi baharu! Tiada Tempoh Hilang Pejabat Pembelian: Peranti siri kalendar dan hari jadi baharu! Feb 29, 2024 pm 12:00 PM

Pejabat Pembelian yang Hilang akan dikemas kini pada pukul 11 ​​pagi pada 28 Februari Pemain boleh pergi ke Taobao untuk mencari di Pejabat Pembelian dan memilih kategori kedai untuk dibeli Kali ini kami membawakan anda siri pesta ulang tahun MBCC dan peranti Kalendar Meja 2024 bersama-sama lihat butiran produk kali ini. Tiada Tempoh Hilang Pejabat Pembelian: Peranti siri kalendar dan hari jadi baharu! Terdapat sesuatu yang baru di Pejabat Perolehan yang Hilang! —Masa pra-jualan: 11:00 pada 28 Februari 2024 - 23:59 pada 13 Mac 2024. Alamat pembelian: Cari Taobao [Indefinite Lost Purchasing Office] dan pilih kategori [Kedai] untuk memasuki kedai untuk pembelian; pengenalan: Peranti baharu yang dikeluarkan kali ini ialah siri parti hari jadi MBCC dan peranti kalendar meja 2024 Sila klik pada imej yang panjang untuk mendapatkan butiran. Pejabat Pembelian memperkenalkan peranti baharu—pelajar MBCC

Acara tema hari jadi Love and Deep Space Qi Yu akan bermula: alami plot sambutan hari jadi eksklusif Acara tema hari jadi Love and Deep Space Qi Yu akan bermula: alami plot sambutan hari jadi eksklusif Feb 29, 2024 pm 03:00 PM

Love and Deep Space telah disahkan akan dikemas kini pada 1 Mac untuk melancarkan acara tema hari jadi Qi Yu kupon harapan ruang dan ganjaran lain yang menanti anda Teruskan Turun dan ikuti editor untuk melihat butiran acara ini. Acara tema hari jadi Qi Yu iaitu Love and Deep Space akan bermula: alami plot hari jadi eksklusif Sertai acara itu dan alami plot hari jadi eksklusif. Terdapat juga ganjaran berwarna-warni seperti pemikiran terhad hari lahir, pakaian harian dan "Deep Space Wishing Baucar·Masa Terhad*20" menanti anda! Masa acara: Selepas kemas kini pada 1 Mac ~ 4:59 pagi pada 8 Mac Pelukan Eksklusif: Hari jadi lima bintang terlepas masa terhad acara ucapan UP Semasa tempoh terhad lima bintang terlepas "Qi Yu·Adventures in this Life" kebarangkalian berharap sangat meningkat untuk masa yang terhad. *Selepas acara, gambar ini

Kembali ke Masa Depan Bagaimana untuk menghabiskan 19996-24 Kembali ke Masa Depan Bagaimana untuk menghabiskan 19996-24 Mar 02, 2024 pm 12:58 PM

Dalam Back to the Future 1999, pemain akan menghadapi banyak cabaran peringkat, dan setiap peringkat membawa cabaran yang sama sekali berbeza Sebagai salah satu peringkat, 6-24 pasti akan mempunyai ramai pemain yang memikirkannya, jadi berikut juga akan membawa kaedah pelepasan yang berkaitan. Kembali ke Masa Depan 19996-24 Kaedah Pembersihan 1. Selepas membakar tahap 30 dalam satu ayat, tunggu bos terpegun dan berikan dia pukulan berat. 2. Utamakan menggunakan C utama dan 142d untuk membakar dalam satu pusingan. 3. Pada pusingan kedua, gunakan kemahiran kecil pembantu dan pengasuh untuk membakar dan kad C utama untuk membina gerakan yang besar. 4. Bos akan terpegun dalam tiga pusingan, dan kemudian dia akan dipukul secara langsung dengan kemahiran bergerak dan kerosakan yang muktamadnya.

Wuthering WavesCara melepasi kesukaran Fantasyland 3 Wuthering WavesCara melepasi kesukaran Fantasyland 3 Feb 28, 2024 pm 10:19 PM

Kongsi cara melepasi tahap Ming Tide Fantasyland Difficulty 3. Ramai orang di Mingchao sedang menyelesaikan tahap 3 tanah fantasi ini sebenarnya agak sukar. Ramai rakan tidak tahu apa yang perlu dilakukan, tetapi jangan risau, editor akan membawanya kepada anda strategi di dalamnya, datang dan mencubanya. Bagaimana untuk melepasi Ringing Tide Fantasy Tahap Kesukaran 3? Memperkukuh kemahiran resonans watak Bell Turtle boleh meningkatkan kesan aerodinamik kita dengan cara ini, kecekapan serangan akan meningkat dan kerosakan akan lebih besar Penggantian kesan juga boleh ditukar. [Metafora] Pilih daripada tiga peringkat pertama: Matahari di Hutan: Ia boleh meningkatkan kerosakan Ji Yan dengan banyak Jika kemahiran digunakan lebih banyak kali, ia boleh menghasilkan kesan pukulan kritikal yang sangat baik. Peranti pelindung: Gunakan teknologi resonans

Kongsi kaedah pelaksanaan menukar hari lahir kepada cap masa dalam PHP Kongsi kaedah pelaksanaan menukar hari lahir kepada cap masa dalam PHP Mar 04, 2024 pm 05:54 PM

Kaedah pelaksanaan menukar hari jadi PHP kepada cap masa dikongsi dalam pembangunan harian Kadangkala kita perlu menukar hari lahir pengguna kepada borang cap masa untuk melaksanakan lebih banyak operasi, seperti mengira umur, membandingkan masa, dsb. Artikel ini akan berkongsi cara menggunakan PHP untuk menukar hari lahir kepada cap masa dan memberikan contoh kod khusus. PHP menyediakan pelbagai fungsi pemprosesan tarikh dan masa, dan kami boleh menggunakan fungsi ini untuk menyelesaikan operasi menukar hari lahir kepada cap masa. Pertama, kita perlu mendapatkan tarikh hari lahir yang dimasukkan oleh pengguna, yang secara amnya boleh diperoleh melalui borang, dan kemudian digunakan

Terangkan proses pengisihan pemilihan dalam bahasa C Terangkan proses pengisihan pemilihan dalam bahasa C Sep 01, 2023 pm 01:57 PM

Isih pemilihan ialah algoritma agresif yang digunakan untuk mencari nombor terkecil daripada tatasusunan dan meletakkannya di kedudukan pertama. Tatasusunan seterusnya yang akan dilalui akan bermula pada indeks, berhampiran dengan tempat nombor terkecil diletakkan. Proses isihan pemilihan memilih elemen terkecil pertama dalam senarai elemen dan meletakkannya di kedudukan pertama. Ulangi operasi yang sama untuk elemen yang tinggal dalam senarai sehingga semua elemen diisih. Pertimbangkan senarai berikut - lulus pertama Sm=a[0]=30Sma[1]

Analisis terperinci masa yang diperlukan untuk naik taraf win10 Analisis terperinci masa yang diperlukan untuk naik taraf win10 Jan 10, 2024 am 12:00 AM

Ramai rakan ingin menaik taraf sistem komputer mereka kepada sistem win10, tetapi mereka tidak tahu berapa lama proses naik taraf akan diambil Hari ini saya telah membawakan anda pengenalan terperinci tentang masa yang diperlukan untuk mengemas kini kepada win10. Berapa lama masa yang diambil untuk mengemas kini kepada win10: 1. Ia berbeza dari kira-kira 40 minit hingga 2/3 jam bergantung pada prestasi mesin setiap pengguna. 2. Masa untuk mengkonfigurasi prestasi juga berbeza, yang berkait rapat dengan jumlah data dalam sistem lama. 3. Jika komputer mempunyai banyak perkara dan papan kekunci mekanikal, ia akan menjadi lebih perlahan. 4. Jika anda menaik taraf daripada win7/8 kepada win10, ia akan mengambil masa kira-kira satu setengah jam. 5. Simpan masa yang cukup lebih awal sebelum menaik taraf untuk membuat sandaran perkara penting untuk mengelakkan kerugian.

Bagaimana untuk menukar hari lahir kepada cap waktu dalam PHP? Bagaimana untuk menukar hari lahir kepada cap waktu dalam PHP? Mar 04, 2024 pm 06:33 PM

PHP ialah bahasa skrip sebelah pelayan yang popular yang biasa digunakan untuk pembangunan laman web dan penjanaan halaman web dinamik. Apabila membangunkan tapak web, ia selalunya melibatkan pemprosesan maklumat hari lahir pengguna Kadangkala perlu menukar hari lahir yang diberikan oleh pengguna kepada cap masa untuk penyimpanan atau pengiraan. Berikut akan memperkenalkan cara menggunakan PHP untuk menukar hari lahir kepada cap masa, dan memberikan contoh kod khusus. Pertama, kita perlu memahami format storan hari lahir. Secara umumnya, format hari lahir ialah "tahun-bulan-hari", seperti "1990-05-20". Kami akan menggunakan data hari lahir dalam format ini,

See all articles