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

数据库
给你一个没有年份的日期,你能算出这个日期所属的星座吗?笔者利用SQL给出一种计算生日所属的星座的方法,与读者分享。

中午正好吃完饭,休息,看到QQ群里面发了一个问题,说给你一个没有年份的日期,算出这个日期所属的星座;起初刚开始的第一个想法就是取星座的开始和起始时间来做区间的比对,得到所在区间,就知道星座了!但后来想想,除了时间区间的比对,有没有其它的方法?

想来想去,试着用数字做比较看看(最后写完才觉得这个本质上和日期做比对没有什么区别);因为星座的时间区间段是固定的,不会有重复的,那么我可以把时间转换成数字,例如水瓶座是1/20到2/18,那我可以转换成120到218,但随之而来的就有一个问题了,例如今天这个日期,3月4号,由于转换成数字后会变成34(应该是304),中间少了个0,怎么都找不到区间,总是计算不对,最后只能改变一下将时间转换为数字的方法了!

  1. SELECT @NowDate = (CAST(MONTH(@Birthday) AS VARCHAR(10)) + CAST((CASE WHEN DAY(@Bir  
  2. thday) < 10  THEN '0' + CAST(DAY(@Birthday) AS VARCHAR(10)) ELSE CAST(DAY(@Birthday)   
  3. AS VARCHAR(10)) ENDAS VARCHAR(10))); 

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

  1. /*    
  2.  星座     日期(公历)    英文名     
  3.  魔羯座 (12/22 - 01/19) Capricorn  
  4.  水瓶座 (01/20 - 02/18) Aquarius     
  5.  双鱼座 (02/19 - 03/20) Pisces     
  6.  牡羊座 (03/21 - 04/20) Aries     
  7.  金牛座 (04/21 - 05/20) Taurus     
  8.  双子座 (05/21 - 06/21) Gemini     
  9.  巨蟹座 (06/22 - 07/22) Cancer     
  10.  狮子座 (07/23 - 08/22) Leo     
  11.  处女座 (08/23 - 09/22) Virgo     
  12.  天秤座 (09/23 - 10/22) Libra     
  13.  天蝎座 (10/23 - 11/21) Scorpio     
  14.  射手座 (11/22 - 12/21) Sagittarius    
  15. */    
  16.  DECLARE @TABLE TABLE   
  17.  (    
  18.      name_zh VARCHAR(128),    
  19.      name_en VARCHAR(128),    
  20.      s_time INT,    
  21.      o_time INT   
  22.  );    
  23.  DECLARE @NowDate INT;    
  24.  DECLARE @Birthday DATETIME;    
  25.  SET @Birthday = GETDATE();    
  26.  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)) ENDAS VARCHAR(10)));    
  27.  INSERT INTO    
  28.      @TABLE   
  29.  VALUES   
  30.      ('魔羯座' ,'Capricorn' ,1222 ,119),    
  31.      ('水瓶座' ,'Aquarius' ,120 ,218),    
  32.      ('双鱼座' ,'Pisces' ,219 ,320),    
  33.      ('牡羊座' ,'Aries' ,321 ,420),    
  34.      ('金牛座' ,'Taurus' ,421 ,520),    
  35.      ('双子座' ,'Gemini' ,521 ,621),    
  36.      ('巨蟹座' ,'Cancer' ,622 ,722),    
  37.      ('狮子座' ,'Leo' ,723 ,822),    
  38.      ('处女座' ,'Virgo' ,823 ,922),    
  39.      ('天秤座' ,'Libra' ,923 ,1022),    
  40.      ('天蝎座' ,'Scorpio' ,1023 ,1121),    
  41.      ('射手座' ,'Sagittarius' ,1122 ,1221);    
  42.  SELECT     
  43.      name_zh,    
  44.      name_en,    
  45.      s_time,    
  46.      o_time    
  47.  FROM    
  48.      @TABLE    
  49.  WHERE    
  50.      @NowDate BETWEEN s_time AND o_time;<BR>  

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

【编辑推荐】

  1. 如何让微软认识闰年的2月29日
  2. 查询表结构的SQL语句
  3. 使用SQL语句查询时间段
  4. 巧用SQL语句删除重复记录
  5. 判断字段是否存在的SQL语句写法

 

责任编辑:艾婧 来源: 博客园
相关推荐

2010-07-21 12:24:45

SQL Server表

2010-07-01 12:38:26

SQL Server表

2021-01-27 11:35:34

高级持续威胁APT网络安全

2010-10-27 16:45:34

Oracle查询日期

2011-04-01 10:16:08

SQL ServerEXISTS结构

2011-06-16 17:34:21

IBMIBM百年

2009-07-10 10:33:42

电磁学特斯拉

2012-04-29 15:57:34

诺基亚

2021-03-26 11:04:44

云计算云计算产业云应用

2015-06-29 11:29:08

2009-04-16 17:30:00

可伸缩管理集成

2011-03-17 13:54:42

查询参数SQL语句利用率

2010-07-15 16:42:32

数据库引擎

2010-07-26 14:02:50

SQL Server临

2016-09-25 22:13:11

程序员代码编码

2019-12-19 13:48:21

云计算安全工具

2015-05-20 11:01:02

Hadoop云计算平台

2015-03-18 09:57:58

云计算平台云计算平台搭建Hadoop

2024-03-29 12:46:27

云计算

2024-05-24 11:38:17

SymPy计算运算
点赞
收藏

51CTO技术栈公众号