当前位置:  数据库>sqlserver

sql server 计算生日所属的星座的代码

    来源: 互联网  发布时间:2014-08-29

    本文导语:  需求是这样的: 给你一个没有年份的日期,算出这个日期所属的星座;起初刚开始的第一个想法就是取星座的开始和起始时间来做区间的比对,得到所在区间,就知道星座了!但后来想想,除了时间区间的比对,有没有其它的方法? 想来...

需求是这样的:
给你一个没有年份的日期,算出这个日期所属的星座;起初刚开始的第一个想法就是取星座的开始和起始时间来做区间的比对,得到所在区间,就知道星座了!但后来想想,除了时间区间的比对,有没有其它的方法?

想来想去,试着用数字做比较看看(最后写完才觉得这个本质上和日期做比对没有什么区别);

因为星座的时间区间段是固定的,不会有重复的,那么我可以把时间转换成数字,例如水瓶座是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
 

说明:
以上实现方法可能过于简单,难免有些问题,仅供大家学习参考。
欢迎拍砖。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • sql2005 大数据量检索分页的sql代码
  • 经典sql代码--解决并清除SQL被注入恶意代码的语句
  • 创建 sql server 链接服务器的sql代码
  • sql server 删除表1某些数据的同时自动删除表2的相关数据的sql代码
  • SQL Server中选出指定范围行的SQL语句代码
  • 推荐SQL Server 重新恢复自动编号列的序号的sql代码
  • C#代码验证sql语句是否正确(只验证不执行sql)的方法
  • php防止sql注入代码实例
  • sql 查询所有数据库、表名、表字段的代码
  • sql 行转列示例代码
  • asp连接sql server 2005的代码
  • 一定得帮我看看sql server2000通过sql server2000jdbc driver的代码
  • 用SQL统计SQLServe表存储空间大小的代码
  • 请问在 Linux 下如何用代码实现连接oracle数据库 并 执行 SQL 语句?
  • 经典Sql代码--取出点击量最高的文章100篇,每个作者不超过5篇 iis7站长之家
  • 经典Sql代码--取出点击量最高的文章100篇,每个作者不超过5篇
  • 查找特定类别的列 sql代码
  • Oracle SQL中实现indexOf和lastIndexOf功能的思路及代码
  • 简单的SQL Server备份脚本代码
  • 经典sql代码--统计电话通话次数以及时长
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL Server统计SQL语句执行时间的脚本
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL客户端软件 PKLite SQL Client
  • java命名空间java.sql接口databasemetadata的类成员方法: getsqlkeywords定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3