/*

--Desc: 在计算员工当前日期的生日时,需要考虑闰年的问题,

一般在2月29号出生的人在非闰年时生日在3月1号过。

--Environment:  SQL SERVER 2005

--Author: Learnsql

*/

USE  Tempdb;

GO

--创建测试表

CREATE TABLE #Employee

(

[Name] NVARCHAR(10),

BirthDay DATETIME

);

GO

--插入数据

INSERT INTO #Employee([Name],BirthDay) VALUES('Tom','1970-1-3');

INSERT INTO #Employee([Name],BirthDay) VALUES('Jim','1971-11-23');

INSERT INTO #Employee([Name],BirthDay) VALUES('Lucy','1972-2-29');

INSERT INTO #Employee([Name],BirthDay) VALUES('Bob','1979-3-15');

INSERT INTO #Employee([Name],BirthDay) VALUES('Jack','1985-5-10');

GO

--生日计算

WITH Emp1([Name],BirthDay,DiffYear,Today) AS --计算当前日期和生日相差的年数

(

SELECT [Name], BirthDay,

DATEDIFF(YEAR, BirthDay, GETDATE()) AS DiffYear,

CAST(CONVERT(NVARCHAR(8), GETDATE(), 112) AS DATETIME) AS Today

FROM #Employee

),

Emp2([Name],BirthDay,Today,BDCur,BDNxt) AS  --计算当前生日及下一年生日

(

SELECT [Name],BirthDay, Today,

DATEADD(YEAR, DiffYear, BirthDay) AS BDCur,

DATEADD(YEAR, DiffYear + 1, BirthDay) AS BDNxt

FROM Emp1

),

Emp3([Name],BirthDay,Today,BDCur,BDNxt) AS  --对闰年生日处理

(

SELECT [Name],BirthDay, Today,

BDCur + CASE WHEN DAY(BirthDay) = 29 AND DAY(BDCur) = 28

THEN 1 ELSE 0 END AS BDCur,

BDNxt + CASE WHEN DAY(BirthDay) = 29 AND DAY(BDNxt) = 28

THEN 1 ELSE 0 END AS BDNxt

FROM Emp2

)

SELECT [Name], BirthDay,

CASE WHEN BDCur >= Today THEN BDCur ELSE BDNxt END AS BirthDate,

DATEDIFF(DAY,Today,CASE WHEN BDCur >= Today THEN BDCur ELSE BDNxt END) AS DiffDay

FROM Emp3;

linux计算生日时间,生日计算相关推荐

  1. c语言计算日出日落时间_计算日出日落算法实现

    首先感谢帮我算题的小玉玉~ 算了一周的日出日落,倍觉痛苦,写下来防止下次再算. 根据经纬度和UTC计算日出日落的思路.算法及scala代码如下~ 日出和日落的计算思路: 一天的日出和日落可以根据正午时 ...

  2. 实现时间的计算: 要求用户输入身份证号,若格式有误,要求其重新输入。然后根据身份证号码输出20岁生日所在周的周三的日期

    实现时间的计算: 要求用户输入身份证号,若格式有误,要求其重新输入.然后根据身份证号码输出20岁生日所在周的周三的日期(个人笔记,大佬勿喷) package day03;import java.uti ...

  3. 编写一个脚本,输入自己的生日时间(YYYYMMDD),计算还有多少天多少个小时是自己的生日。

    编写一个脚本,输入自己的生日时间(YYYYMMDD),计算还有多少天多少个小时是自己的生日. #!/bin/sh read -p "Input your birthday(YYYYmmdd) ...

  4. mysql与oracle根据生日时间计算生日

    mysql写法 SELECT user_id, birthday, CURDATE() nowaday,(YEAR(CURDATE())-YEAR(STR_TO_DATE(birthday,'%Y-% ...

  5. (程序设计逻辑)如何按生日的年月日计算年龄(周岁)

    程序设计就跟我们平时头脑想的是一样的,只需要解读我们平常是怎样按顺序进行计算的,然后转换成程序语句就可以了,所以设计程序不是压力很大.下面打个比方:如何按生日的年月日计算年龄(周岁) 我们头脑是怎样计 ...

  6. linux c计算时间差值,获取时间和计算时间差的几种方法总结,时间差几种方法...

    获取时间和计算时间差的几种方法总结,时间差几种方法 一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( ...

  7. Python3计算今天是否生日以及距离生日还有多少天

    #!/usr/bin/python # -*- coding: utf-8 -*-import datetime import time# 年月日单个 toyear = time.strftime(' ...

  8. python算生日_Python3计算今天是否生日以及距离生日还有多少天

    #!/usr/bin/python # -*- coding: utf-8 -*- import datetime import time # 年月日单个 toyear = time.strftime ...

  9. Java计算当前日期距离生日还有多少天

    1.键盘录入你的生日字符串 (如:"1998年08月08日")2.计算当前日期距离生日那天有多少天? public static void main(String[] args) ...

最新文章

  1. python开源项目贡献_通过为开源项目做贡献,我如何找到理想的工作
  2. jquery-datatables 销毁重新渲染
  3. OSPF(Open Shortest Path First开放式最短路径优先)
  4. 计算机网络及应用 pdf,计算机网络及应用卷.pdf
  5. Redis命令:SETNX key value(SET if Not eXists)
  6. 2015/Province_C_C++_C/6/奇妙的数字
  7. 忍辱负重的小白兔们 - 验收准则的意义
  8. pypi.python.org_在Pypi上发布自己的Python包
  9. MTK 驱动开发(18)---LCD 参数理解
  10. 基础知识(四)C++常用函数.txt
  11. 演示:扩展ACL的配置与应用技巧
  12. CCPC-Wannafly Winter Camp Day1 (Div2, onsite)【流流流动】
  13. Let'sEncrypt免费域名申请一键式脚本-目前最简单的脚本
  14. 公众号零基础,只需10分钟,你的公众号也能5天500+粉丝
  15. 验证二叉树的前序序列化
  16. centos网络显示已连接但无法打开网页
  17. 异步下载小说《诡秘之主》
  18. 数据库系统概论复习提纲
  19. 浅析Trafodion体系结构
  20. 学习大数据需要什么基础?大数据要学哪些内容?

热门文章

  1. 数据时代,漫谈数据建模
  2. 使用红孩儿工具箱完成基于Cocos2d-x的简单游戏动画界面
  3. 科学计算机如何锁定,华为计算器怎么才能固定竖屏和调出科学计算器?取消自动旋转操作介绍...
  4. 韩国3D艺术家 hyeong-hoon lim 性感女战士 3D角色
  5. 一文带你全面了解跨境电商10大平台
  6. pdf转ppt简单方法
  7. KKCapture 高清录像软
  8. 微服务平台的设计要点_我在微服务方面的经验中有5点要点
  9. redission-解锁
  10. java开发boss直聘要求(2020年4月27日)