SQL-計算生日所屬的星座

來源:互聯網
上載者:User

  中午正好吃完飯,休息,看到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 @TABLEVALUES('魔羯座' ,'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 > 1222BEGINSELECT '魔羯座' name_zh,'Capricorn' name_en,'1222' s_time,'119' o_timeENDELSEBEGINSELECT  name_zh,name_en,s_time,o_timeFROM @TABLE WHERE @NowDate BETWEEN s_time AND o_time;END

這個方法沒有過細的去驗證,可能會存在Bug或者效能上的損失,以後有時間會在進一步改寫!

eg:

  為了處理摩羯座的那個首尾問題,看來只能這麼解決了...哎!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.