风哥教程

培训 . 交流 . 分享
Make progress together!

利用SQL计算生日所属的星座

[复制链接]
内容发布:luashin| 发布时间:2017-6-8 20:29:16
利用SQL计算生日所属的星座
    中午正好吃完饭,休息,看到QQ群里面发了一个问题,说给你一个没有年份的日期,算出这个日期所属的星座;起初刚开始的第一个想法就是取星座的开始和起始时间来做区间的比对,得到所在区间,就知道星座了!但后来想想,除了时间区间的比对,有没有其它的方法?
想来想去,试着用数字做比较看看(最后写完才觉得这个本质上和日期做比对没有什么区别);因为星座的时间区间段是固定的,不会有重复的,那么我可以把时间转换成数字,例如水瓶座是1/20到2/18,那我可以转换成120到218,但随之而来的就有一个问题了,例如今天这个日期,3月4号,由于转换成数字后会变成34(应该是304),中间少了个0,怎么都找不到区间,总是计算不对,最后只能改变一下将时间转换为数字的方法了!
SELECT @NowDate = (CAST(MONTH(@Birthday) AS VARCHAR(10)) + CAST((CASE WHEN DAY(@Bir
thday) < 10  THEN '0' + CAST(DAY(@Birthday) AS VARCHAR(10)) ELSE CAST(DAY(@Birthday)  
AS VARCHAR(10)) END) AS VARCHAR(10)));
这个计算星座的方法,最麻烦的就是在前期的日期转换上,时间转好了,其它的就好办了,做数字区间的对比吧,就能得到你想要的星座了!
/*   
星座     日期(公历)    英文名   
魔羯座 (12/22 - 01/19) Capricorn
水瓶座 (01/20 - 02/18) Aquarius   
双鱼座 (02/19 - 03/20) Pisces   
牡羊座 (03/21 - 04/20) Aries   
金牛座 (04/21 - 05/20) Taurus   
双子座 (05/21 - 06/21) Gemini   
巨蟹座 (06/22 - 07/22) Cancer   
狮子座 (07/23 - 08/22) Leo   
处女座 (08/23 - 09/22) Virgo   
天秤座 (09/23 - 10/22) Libra   
天蝎座 (10/23 - 11/21) Scorpio   
射手座 (11/22 - 12/21) Sagittarius   
*/   
DECLARE @TABLE TABLE  
(   
     name_zh VARCHAR(128),   
     name_en VARCHAR(128),   
     s_time INT,   
     o_time INT  
);   
DECLARE @NowDate INT;   
DECLARE @Birthday DATETIME;   
SET @Birthday = GETDATE();   
SELECT @NowDate = (CAST(MONTH(@Birthday) AS VARCHAR(10)) + CAST((CASE WHEN DAY(@Birthday) < 10  THEN '0' + CAST(DAY(@Birthday) AS VARCHAR(10)) ELSE CAST(DAY(@Birthday) AS VARCHAR(10)) END) AS VARCHAR(10)));   
INSERT INTO   
     @TABLE  
VALUES  
     ('魔羯座' ,'Capricorn' ,1222 ,119),   
     ('水瓶座' ,'Aquarius' ,120 ,218),   
     ('双鱼座' ,'Pisces' ,219 ,320),   
     ('牡羊座' ,'Aries' ,321 ,420),   
     ('金牛座' ,'Taurus' ,421 ,520),   
     ('双子座' ,'Gemini' ,521 ,621),   
     ('巨蟹座' ,'Cancer' ,622 ,722),   
     ('狮子座' ,'Leo' ,723 ,822),   
     ('处女座' ,'Virgo' ,823 ,922),   
     ('天秤座' ,'Libra' ,923 ,1022),   
     ('天蝎座' ,'Scorpio' ,1023 ,1121),   
     ('射手座' ,'Sagittarius' ,1122 ,1221);   
SELECT   
     name_zh,   
     name_en,   
     s_time,   
     o_time   
FROM   
     @TABLE   
WHERE   
     @NowDate BETWEEN s_time AND o_time;
这个方法没有过细的去验证,可能会存在Bug或者性能上的损失!



上一篇:MySQL修改表结构
下一篇:MySQL函数编写和存储过程1
回复

使用道具 举报

1框架
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门文章教程

  • 风哥Oracle数据库巡检工具V1.0(附2.6网页
  • 实战PHP与MySQL权威指南PDF电子书下载
  • 大数据技术与应用入门培训教程(电子版下载
  • Oracle 12cR2 九大新功能全面曝光_详解云数
  • Oracle OCP认证考试IZ0-053题库共712题数据
  • MySQL5权威指南(第3版)PDF电子版下载
快速回复 返回顶部 返回列表