谁可相欹 发表于 2015-1-16 22:33:01

MSSQL教程之关于日期天数盘算的几个函数!

InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定函数关于日期天数盘算的几个函数!
明天早上俄然要用到一个盘算某月有几天的函数,翻了半天没找到体系自带着中函数,因而下手写了一个,以下:

**前往某个月有几天FUNCTIONHowMonthDay()PARAMETERScDateLOCALDaysasInteger,YearsasIntegerIF!TYPE("cDate")=="D"MESSAGEBOX("参数范例不准确,应当为日期型","体系提醒!")RETURNENDIFDays=IIF(INLIST(MONTH(cDate),1,3,5,7,8,10,12),31,30)**闰年盘算办法Years=YEAR(cDate)IFMONTH(cDate)==2Days=IIF(Years%400==0OR(Years%4==0ANDYears%1000),29,28)ENDIFRETURNDaysENDFUNC

厥后郑宇年老给我供应了一个前往月尾的函数。以下:
PROCEDUREEDOM*FUNCTION:前往本月月尾*M.L.Y1998.8.8PARAMETERSDATE_TODAYPRIVATEALLSETDATETOANSISETCENTURYONIFMONTH(DATE_TODAY)<12RETURNCTOD(STR(YEAR(DATE_TODAY),4,0)+".";+STR(MONTH(DATE_TODAY)+1,2,0)+".01")-1ELSERETURNEDOY(DATE_TODAY)ENDIF
思考了半天发明前往月尾大概还要复杂一点,我改善了一下:

cDate=Date()

??cDate+(32-DAY(cDate))-DAY(cDate+(32-DAY(cDate)))

最初用这个思绪改善了一下前往某月有几天的函数,以下:

FUNCTIONHowMonthDay()PARAMETERScDateLOCALDaysasIntegerIF!TYPE("cDate")=="D"MESSAGEBOX("参数范例不准确,应当为日期型","体系提醒!")RETURNENDIFDays=DAY(cDate+(32-DAY(cDate))-DAY(cDate+(32-DAY(cDate))))RETURNDaysENDFUNC

实在最主要的只要一句:Days=DAY(cDate+(32-DAY(cDate))-DAY(cDate+(32-DAY(cDate))))也不必管闰年闰年了,费事。

如果前往月尾,那这句改成:cDate+(32-DAY(cDate))-DAY(cDate+(32-DAY(cDate)))便可

道理就是依据增添值来盘算当月的下一个月超越几天,然后减往几天就是当月的最初一天了。
支持多种存储引擎。

若相依 发表于 2015-1-19 16:25:18

大侠们有推荐的书籍和学习方法写下吧。

兰色精灵 发表于 2015-1-28 08:28:09

需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。

活着的死人 发表于 2015-2-5 20:10:31

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力

若天明 发表于 2015-2-13 11:39:17

原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!

因胸联盟 发表于 2015-3-3 20:50:25

我个人认为就是孜孜不懈的学习

变相怪杰 发表于 2015-3-11 13:39:26

多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。

愤怒的大鸟 发表于 2015-3-18 16:36:56

只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。

再见西城 发表于 2015-3-26 04:28:52

只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
页: [1]
查看完整版本: MSSQL教程之关于日期天数盘算的几个函数!