• SQL计算生日所属的星座 XuZhao


      中午正好吃完饭,休息,看到QQ群里面发了一个问题,说给你一个没有年份的日期,算出这个日期所属的星座;起初刚开始的第一个想法就是取星座的开始和起始时间来做区间的比对,得到所在区间,就知道星座了!但后来想想,除了时间区间的比对,有没有其它的方法?
      想来想去,试着用数字做比较看看(最后写完才觉得这个本质上和日期做比对没有什么区别);
        因为星座的时间区间段是固定的,不会有重复的,那么我可以把时间转换成数字,例如水瓶座是1/20到2/18,那我可以转换成120到218,但随之而来的就有一个问题了,例如今天这个日期,3月4号,由于转换成数字后会变成34(应该是304),中间少了个0,怎么都找不到区间,总是计算不对,最后只能改变一下将时间转换为数字的方法了!

     

    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)));
    

    这个计算星座的方法,最麻烦的就是在前期的日期转换上,时间转好了,其它的就好办了,做数字区间的对比吧,就能得到你想要的星座了!

     

    /*
    	星座     日期(公历)    英文名
    
    	魔羯座 (12/22 - 1/19) Capricorn
    	水瓶座 (1/20 - 2/18) Aquarius 
    	双鱼座 (2/19 - 3/20) Pisces 
    	牡羊座 (3/21 - 4/20) Aries 
    	金牛座 (4/21 - 5/20) Taurus 
    	双子座 (5/21 - 6/21) Gemini 
    	巨蟹座 (6/22 - 7/22) Cancer 
    	狮子座 (7/23 - 8/22) Leo 
    	处女座 (8/23 - 9/22) Virgo 
    	天秤座 (9/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);
    	
    IF @NowDate > 1222
    	BEGIN
    		SELECT '魔羯座' name_zh,'Capricorn' name_en,'1222' s_time,'119' o_time
    	END
    ELSE
    	BEGIN
    		SELECT  
    			name_zh,
    			name_en,
    			s_time,
    			o_time
    		FROM 
    			@TABLE 
    		WHERE 
    			@NowDate BETWEEN s_time AND o_time;
    	END
    

    这个方法没有过细的去验证,可能会存在Bug或者性能上的损失,以后有时间会在进一步改写!

    eg:

      为了处理摩羯座的那个首尾问题,看来只能这么解决了...哎!

  • 相关阅读:
    .Net Core使用Socket与树莓派进行通信
    c#中Socket网络通信的入门
    django 中 cookie与session 相关的知识
    怎么解决MySQL密码问题
    python 虚拟环境安装与卸载
    Linux 怎么清理缓存
    VMware 虚拟机黑屏问题
    如何在Ubuntu上给软件创建快捷方式
    Linux-Windows10双系统安装
    Tomcat开启JMX监控
  • 原文地址:https://www.cnblogs.com/x1988z/p/1970797.html
Copyright © 2020-2023  润新知