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

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

Jun 01, 2016 pm 01:02 PM
Geburtstag 过程

前言:

遇到朋友提问,如下:

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,总结

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Das Geburtstagsthema-Event von Love and Deep Space Qi Yu beginnt gleich: Erleben Sie die exklusive Handlung zur Geburtstagsfeier Das Geburtstagsthema-Event von Love and Deep Space Qi Yu beginnt gleich: Erleben Sie die exklusive Handlung zur Geburtstagsfeier Feb 29, 2024 pm 03:00 PM

Love and Deep Space hat bestätigt, dass es am 1. März aktualisiert wird, um das Geburtstags-Themenevent von Qi Yu zu starten. Spieler können an dem Event teilnehmen, um die exklusive Geburtstagsfeier zu erleben. Darüber hinaus gibt es Geburtstags-Limited-Gedanken, tägliche Kleidung, 20 Deep Space-Wunschgutscheine und andere Belohnungen warten auf Sie. Kommen Sie vorbei und folgen Sie dem Herausgeber, um die Details dieser Veranstaltung zu sehen. Qi Yus Geburtstags-Themenveranstaltung „Love and Deep Space“ steht vor der Tür: Erleben Sie die exklusive Geburtstagshandlung. Nehmen Sie an der Veranstaltung teil und erleben Sie die exklusive Geburtstagshandlung. Es warten auch farbenfrohe Belohnungen wie auf den Geburtstag begrenzte Gedanken, Alltagskleidung und „Deep Space Wishing Vouchers · Zeitlich begrenzt*20“ auf Sie! Ereigniszeit: Nach dem Update am 1. März ~ 4:59 Uhr am 8. März Exklusive Umarmung: Geburtstags-Fünf-Sterne-Miss-Wunschereignis für begrenzte Zeit UP Während der zeitlich begrenzten Fünf-Sterne-Miss-Wunschwahrscheinlichkeit „Qi Yu·Adventures in this Life“. wird für eine begrenzte Zeit stark erhöht. *Nach der Veranstaltung dieses Foto

Keine Zeit verloren Einkaufsbüro: Neue Kalender- und Geburtstagsserien-Peripheriegeräte! Keine Zeit verloren Einkaufsbüro: Neue Kalender- und Geburtstagsserien-Peripheriegeräte! Feb 29, 2024 pm 12:00 PM

Es wurde bestätigt, dass das Lost Time-Einkaufsbüro am 28. Februar um 11 Uhr aktualisiert wird. Spieler können nach Taobao gehen, um nach dem Lost Time-Einkaufsbüro zu suchen und die Store-Kategorie zum Kauf auszuwählen. Dieses Mal präsentieren wir Ihnen die MBCC-Geburtstagsfeierserie und Peripheriegeräte für den Tischkalender 2024 kommen zusammen. Schauen Sie sich dieses Mal die Produktdetails an. Keine Zeit verloren Einkaufsbüro: Neue Kalender- und Geburtstagsserien-Peripheriegeräte! Es gibt etwas Neues im Lost Procurement Office! – Vorverkaufszeit: 28. Februar 2024, 11:00 Uhr – 13. März 2024, 23:59 Uhr. Kaufadresse: Taobao, suchen Sie nach [Unbestimmtes verlorenes Einkaufsbüro] und wählen Sie die Kategorie [Geschäft] aus, um das Geschäft zum Kauf von Peripheriegeräten zu betreten Einführung: Die neuen Peripheriegeräte, die dieses Mal veröffentlicht werden, sind MBCC-Geburtstagsfeierserien und 2024-Tischkalender-Peripheriegeräte. Klicken Sie bitte auf das lange Bild, um weitere Informationen zu erhalten. Das Einkaufsbüro stellt neue Peripheriegeräte vor – MBCC-Studenten

Zurück in die Zukunft So verbringen Sie 1996–24 Zurück in die Zukunft So verbringen Sie 1996–24 Mar 02, 2024 pm 12:58 PM

In „Zurück in die Zukunft 1999“ werden die Spieler mit vielen Level-Herausforderungen konfrontiert, und jedes Level bringt völlig andere Herausforderungen mit sich. Als eines der Level werden sicherlich viele Spieler darüber nachdenken. Sie wissen also, wie man dieses Level herausfordert Im Folgenden finden Sie auch relevante Freigabemethoden. Zurück in die Zukunft 1996-24 Freigabemethode 1. Nachdem Sie in einem Satz auf Level 30 gebrannt haben, warten Sie, bis der Boss betäubt ist, und verprügeln Sie ihn heftig. 2. Priorisieren Sie die Verwendung von Haupt-C und 142d, um in einer Runde zu brennen. 3. In der zweiten Runde nutzen Sie die kleinen Fähigkeiten der Hilfs- und Kindermädchen zum Brennen und die Hauptkarte C, um einen großen Zug zu bauen. 4. Der Boss wird in drei Runden betäubt und dann direkt mit seinen ultimativen Bewegungs- und Schadensfähigkeiten geschlagen.

Wuthering WavesSo bestehen Sie den Fantasyland-Schwierigkeitsgrad 3 Wuthering WavesSo bestehen Sie den Fantasyland-Schwierigkeitsgrad 3 Feb 28, 2024 pm 10:19 PM

Teilen Sie uns mit, wie Sie das Level von Ming Tide Fantasyland Schwierigkeitsgrad 3 bestehen. Viele Leute in Mingchao schließen Level 3 dieses Fantasy-Landes ab. Viele Freunde wissen noch nicht, was sie tun sollen, aber keine Sorge, der Herausgeber wird es Ihnen bringen Wenn Sie wissen, welche Strategien darin enthalten sind, kommen Sie vorbei und probieren Sie es aus. Wie kann man den Bell Turtle-Charakter im Schwierigkeitsgrad 3 bestehen? Durch die Stärkung der Resonanzfähigkeiten wird die Angriffseffizienz erhöht und der Schaden kann auch größer sein ausgetauscht. [Metapher] Wählen Sie aus den ersten drei Stufen: Sonne im Wald: Sie kann den Schaden von Ji Yan erheblich erhöhen. Wenn die Fertigkeit öfter verwendet wird, kann sie einen sehr guten kritischen Treffereffekt erzeugen. Schutzeinrichtung: Resonanztechnik verwenden

Teilen Sie die Implementierungsmethode zum Konvertieren von Geburtstagen in Zeitstempel in PHP Teilen Sie die Implementierungsmethode zum Konvertieren von Geburtstagen in Zeitstempel in PHP Mar 04, 2024 pm 05:54 PM

Die Implementierungsmethode zum Konvertieren des PHP-Geburtstags in einen Zeitstempel wird in der täglichen Entwicklung verwendet. Manchmal müssen wir den Geburtstag des Benutzers in einen Zeitstempel konvertieren, um weitere Vorgänge wie die Berechnung des Alters, den Zeitvergleich usw. durchzuführen. In diesem Artikel erfahren Sie, wie Sie mit PHP Geburtstage in Zeitstempel konvertieren, und stellen spezifische Codebeispiele bereit. PHP bietet eine Fülle von Datums- und Zeitverarbeitungsfunktionen, mit denen wir die Konvertierung von Geburtstagen in Zeitstempel abschließen können. Zuerst müssen wir das vom Benutzer eingegebene Geburtstagsdatum abrufen, das im Allgemeinen über ein Formular abgerufen werden kann, und es dann verwenden

Erklären Sie den Prozess der Auswahlsortierung in der Sprache C Erklären Sie den Prozess der Auswahlsortierung in der Sprache C Sep 01, 2023 pm 01:57 PM

Die Auswahlsortierung ist ein aggressiver Algorithmus, der verwendet wird, um die kleinste Zahl aus einem Array zu finden und sie an der ersten Position zu platzieren. Das nächste zu durchlaufende Array beginnt am Index, nahe der Stelle, an der die kleinste Zahl platziert ist. Der Prozess der Auswahlsortierung wählt das erste kleinste Element in der Elementliste aus und platziert es an der ersten Position. Wiederholen Sie den gleichen Vorgang für die verbleibenden Elemente in der Liste, bis alle Elemente sortiert sind. Betrachten Sie die folgende Liste – erster Durchgang Sm=a[0]=30Sma[1]

Detaillierte Analyse der für das Win10-Upgrade benötigten Zeit Detaillierte Analyse der für das Win10-Upgrade benötigten Zeit Jan 10, 2024 am 12:00 AM

Viele Freunde möchten ihre Computersysteme auf Win10 aktualisieren, wissen aber nicht, wie lange der Upgrade-Prozess dauern wird. Heute habe ich Ihnen eine detaillierte Einführung in die Zeit gegeben, die für die Aktualisierung auf Win10 erforderlich ist. Wie lange dauert die Aktualisierung auf Win10: 1. Sie variiert zwischen etwa 40 Minuten und 2/3 Stunden, abhängig von der Leistung des Computers jedes Benutzers. 2. Die Zeit zum Konfigurieren der Leistung ist ebenfalls unterschiedlich, was eng mit der Datenmenge im alten System zusammenhängt. 3. Wenn der Computer viele Dinge und eine mechanische Tastatur hat, wird er noch langsamer. 4. Wenn Sie ein Upgrade von Win7/8 auf Win10 durchführen, dauert es etwa eineinhalb Stunden. 5. Planen Sie vor dem Upgrade ausreichend Zeit ein, um wichtige Dinge zu sichern und Verluste zu vermeiden.

Detaillierte Erläuterung des Golang-Kompilierungsprozesses Detaillierte Erläuterung des Golang-Kompilierungsprozesses Mar 07, 2024 am 09:24 AM

Detaillierte Erklärung des Golang-Kompilierungsprozesses Golang (auch bekannt als Go) ist eine von Google entwickelte Programmiersprache. Sie zeichnet sich durch Einfachheit, Effizienz, Parallelität usw. aus und hat daher breite Aufmerksamkeit und Anwendung gefunden. Beim Programmieren mit Golang ist die Kompilierung ein sehr wichtiger Schritt. In diesem Artikel wird der Golang-Kompilierungsprozess ausführlich vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Kompilierungsprozess der lexikalischen Analyse des Golang-Quellcodes (LexicalAnalysis) Der erste Schritt im Kompilierungsprozess ist das Wort

See all articles