如何在 mySQL 中使用案例编写生肖查询

Posted

技术标签:

【中文标题】如何在 mySQL 中使用案例编写生肖查询【英文标题】:How to write a query for zodiac using case in mySQL 【发布时间】:2014-07-08 11:50:14 【问题描述】:

显示学生姓名、出生日期和他们的星座。使用十二生肖作为别名

一个。白羊座 3 月 21 日至 4 月 19 日

b.金牛座4月20日-5月20日

c。双子座5月21日-6月20日

d。巨蟹座 Jun21- Jul22

e。狮子座 7 月 23 日- 8 月 22 日

f。处女座 8 月 23 日至 9 月 22 日

g.天秤座 9 月 23 日至 10 月 22 日

h。天蝎座 10 月 23 日- 11 月 21 日

我。射手座 11 月 22 日至 12 月 21 日

j。摩羯座 12 月 22 日- 1 月 19 日

k。水瓶座1月20日-2月18日

l。双鱼座2月19日- 3月20日

我写的代码是:

select sname, sdob, case  
when sdob between (select date('____-03-21')) and (select date('____-04-19')) then 'Aries'
when sdob between '%-04-20' and '%-05-20' then 'Tarus'
when sdob between '%-05-21' and '%-06-20' then 'Gemini'
when sdob between '%-06-21' and '%-07-19' then 'Cancer'
when sdob between '%-07-21' and '%-08-19' then 'Leo'
when sdob between '%-08-21' and '%-09-19' then 'Virgo'
when sdob between '%-09-21' and '%-10-19' then 'Libra'
when sdob between ( sdob like'%-10-21') and ( sdob like'%-11-19') then 'Scropio'
when sdob between ( sdob like'%-11-21') and ( sdob like'%-12-19') then 'Sagittarious'
when sdob between ( sdob like'%-12-21') and ( sdob like'%-01-19') then 'Capricon'
when sdob between '____-01-21' and '____-02-19' then 'Aquarius'
when sdob between '%-02-21' and '%-03-19' then 'Pisces'
end 'SunSign'
from student;

但它会在输出的 SunSign 字段中显示所有空值。

【问题讨论】:

sdob 是真实的日期字段吗? 【参考方案1】:

如果 sdob 是日期列,则 MONTHDAYOFMONTH 函数可以与 CASE 语句一起使用,如下所示:

select sname, sdob, 
case  
WHEN (MONTH(sdob) = 3 AND DAYOFMONTH(sdob) >= 21) OR (MONTH(sdob) = 4 AND DAYOFMONTH(sdob) <= 19) THEN 'Aries'
WHEN (MONTH(sdob) = 4 AND DAYOFMONTH(sdob) >= 20) OR (MONTH(sdob) = 5 AND DAYOFMONTH(sdob) <= 20) THEN 'Taurus'
WHEN (MONTH(sdob) = 5 AND DAYOFMONTH(sdob) >= 21) OR (MONTH(sdob) = 6 AND DAYOFMONTH(sdob) <= 20) THEN 'Gemini'
WHEN (MONTH(sdob) = 6 AND DAYOFMONTH(sdob) >= 21) OR (MONTH(sdob) = 7 AND DAYOFMONTH(sdob) <= 20) THEN 'Cancer'
WHEN (MONTH(sdob) = 7 AND DAYOFMONTH(sdob) >= 21) OR (MONTH(sdob) = 8 AND DAYOFMONTH(sdob) <= 20) THEN 'Leo'
WHEN (MONTH(sdob) = 8 AND DAYOFMONTH(sdob) >= 21) OR (MONTH(sdob) = 9 AND DAYOFMONTH(sdob) <= 20) THEN 'Virgo'
WHEN (MONTH(sdob) = 9 AND DAYOFMONTH(sdob) >= 21) OR (MONTH(sdob) = 10 AND DAYOFMONTH(sdob) <= 20) THEN 'Libra'
WHEN (MONTH(sdob) = 10 AND DAYOFMONTH(sdob) >= 21) OR (MONTH(sdob) = 11 AND DAYOFMONTH(sdob) <= 20) THEN 'Scorpio'
WHEN (MONTH(sdob) = 11 AND DAYOFMONTH(sdob) >= 21) OR (MONTH(sdob) = 12 AND DAYOFMONTH(sdob) <= 20) THEN 'Sagittarius'
WHEN (MONTH(sdob) = 12 AND DAYOFMONTH(sdob) >= 21) OR (MONTH(sdob) = 1 AND DAYOFMONTH(sdob) <= 20) THEN 'Capricorn'
WHEN (MONTH(sdob) = 1 AND DAYOFMONTH(sdob) >= 21) OR (MONTH(sdob) = 2 AND DAYOFMONTH(sdob) <= 20) THEN 'Aquarius'
WHEN (MONTH(sdob) = 2 AND DAYOFMONTH(sdob) >= 21) OR (MONTH(sdob) = 3 AND DAYOFMONTH(sdob) <= 20) THEN 'Pisces'
end 'SunSign'
from student;

请注意,通过稍微更改日期限制,我已经关闭了范围内的一些差距(例如天秤座和天蝎座之间)。

【讨论】:

以上是关于如何在 mySQL 中使用案例编写生肖查询的主要内容,如果未能解决你的问题,请参考以下文章

我将如何在 Laravel Eloquent 中编写这个 MySQL 查询?

如何在 MySQL 选择查询中编写正则表达式?

如何在 mysql 查询中编写 javascript 代码?

MySQL 查询:如何在 Django 中编写?

在MySql中、怎样根据年份或者月份查询数据表中的数据?

如何在 laravel 5.4 中编写 mysql 查询?