ITPUX技术网

交流 . 资讯 . 分享
Make progress together!
Linux操作系统下Oracle11g R2 RAC 安装配置教程
Oracle数据库培训-备份恢复-性能优化-集群容灾
Oracle数据库DBA高级工程师培训视频

利用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框架
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表