惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
V
V2EX
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Register - Security
The Register - Security
MongoDB | Blog
MongoDB | Blog
P
Privacy International News Feed
The Last Watchdog
The Last Watchdog
Security Archives - TechRepublic
Security Archives - TechRepublic
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
K
Kaspersky official blog
S
Secure Thoughts
T
Tenable Blog
Security Latest
Security Latest
The Cloudflare Blog
S
Security @ Cisco Blogs
H
Heimdal Security Blog
aimingoo的专栏
aimingoo的专栏
TaoSecurity Blog
TaoSecurity Blog
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
Schneier on Security
Schneier on Security
Webroot Blog
Webroot Blog
G
Google Developers Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Scott Helme
Scott Helme
IT之家
IT之家
Latest news
Latest news
The Hacker News
The Hacker News
C
Check Point Blog
T
The Exploit Database - CXSecurity.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
N
News | PayPal Newsroom
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
S
Security Affairs
S
Securelist
Google Online Security Blog
Google Online Security Blog
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
C
Cybersecurity and Infrastructure Security Agency CISA
A
About on SuperTechFans

博客园 - litsword

[转]IDENT_CURRENT、SCOPE_IDENTITY、@@IDENTITY 差異對照表 [转贴]TFS Power Tools–September 2010 Release SQL 中使用正则表达式过滤字母或数字 [转载]记不住ASP.NET页面生命周期的苦恼 Split Full Name as First and Last HTML 合并单元格示例 动态加载配置文件 [转载]实现PadLeft的SQL脚本 Useful SQL script 在Update 和 Delete语句中使用 Inner Join SQL游标遍历时的变量赋值 SQL Date Time format SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 的区别 Union合并数组(去掉重复的项目) Winform 版本信息 事件的定义 【原创】RSS开发心得小结 SQL数据类型nchar,char,varchar与nvarchar区别 JavaScript里面三个等号和两个等号的区别
Sql语句 生日提醒
litsword · 2011-08-25 · via 博客园 - litsword
/*
--Desc: 在计算员工当前日期的生日时,需要考虑闰年的问题,
一般在2月29号出生的人在非闰年时生日在3月1号过。
--Environment: SQL SERVER 2008
--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-- 提前通知天数
DECLARE @ReminderDay INT
SET @ReminderDay = 100;--生日计算
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 #Employee.* FROM (
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) Emp4
INNER JOIN #Employee
ON Emp4.Name = #Employee.Name
WHERE Emp4.DiffDay < @ReminderDay
;