ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 1297|回复: 2

[原创] 关于如何计算星期几

[复制链接]
认证徽章
论坛徽章:
7
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47技术图书徽章
日期:2017-02-09 17:05:19秀才
日期:2017-02-22 15:16:26秀才
日期:2017-02-22 15:18:00现任管理团队成员
日期:2017-06-03 02:10:11版主1段
日期:2017-06-05 09:06:08
发表于 2017-6-10 09:48 | 显示全部楼层 |阅读模式
在oralce版看到一个不错的问题,把我的回答转过来供大家参考.我们都知道:SELECT DATENAME(weekday, GETDATE());
可以获得 某个日期的是星期几。但是这个是如何实现的呢?

过日期算星期几是有公式的。比较著名的是蔡勒(Zeller)公式.
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1.
公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;
[ ]代表取整,即只要整数部分.(C是世纪数减一,y是年份后两位,M是月份,d是日数.1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值.)算出来的W除以7,余数是几就是星期几.如果余数是0,则为星期日。
比如今天:2017 06 10
select 17+(17/4)+(20/4)-2*20+(26*(6+1)/10)+10-1 =13
SELECT 13%7=6
就是星期六。

认证徽章
论坛徽章:
54
秀才
日期:2017-02-22 15:18:002015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-03-04 14:48:16马上有对象
日期:2014-10-24 17:37:55马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11ITPUB社区12周年站庆徽章
日期:2013-10-08 15:00:34ITPUB社区12周年站庆徽章
日期:2013-10-08 14:57:28ITPUB社区12周年站庆徽章
日期:2013-10-08 14:54:39林肯
日期:2013-09-12 15:57:33
发表于 2017-6-11 09:03 | 显示全部楼层
另一个思路:取1900-01-01是星期几,按期间有多少天,取余也可
虽然没这个算法通用

使用道具 举报

回复
认证徽章
论坛徽章:
7
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47技术图书徽章
日期:2017-02-09 17:05:19秀才
日期:2017-02-22 15:16:26秀才
日期:2017-02-22 15:18:00现任管理团队成员
日期:2017-06-03 02:10:11版主1段
日期:2017-06-05 09:06:08
发表于 2017-6-11 09:18 | 显示全部楼层
luckyrandom 发表于 2017-6-11 09:03
另一个思路:取1900-01-01是星期几,按期间有多少天,取余也可
虽然没这个算法通用

恩,不错

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表