如何在 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 是日期列,则 MONTH
和 DAYOFMONTH
函数可以与 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 查询?