利用SQL計算生日所屬的星座

來源:互聯網
上載者:User

中午正好吃完飯,休息,看到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)) END) AS 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)) END) AS 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或者效能上的損失,以後有時間會在進一步改寫!

編輯精選】

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.