sqlserver的求当前月第一天和最后一天的函数

今天被派到一个任务,原先项目中有一个功能是读取某个站点学习的次数,如果该次数小于3,则会有一个警告的符号,当时查询的是当前日期之前的次数,现在要改为当前月的学习次数小于三次,就要给出警告的提示。

其实这个功能也不难,按照一般的做法是获取当年的日期,拿到年份和月份,然后拼接字符串就行了,比如拿到的是2010年和11月份,那么拼接两个string,一个是2010年11月1号00:00,一个是2010年11月31号00:00。

但这样写未免有些麻烦,sqlserver数据库自带了这样的两个函数,代码如下:

 

当月第一天:   select   dateadd(dd,-day(getdate())+1,getdate())  
当月最后一天: select   dateadd(dd,-day(getdate()),dateadd(m,1,getdate()))

 

于是,在我的sql语句里面只要比较“学习时间”(表里面的一个字段值)>=  dateadd(dd,-day(getdate())+1,getdate()),<=dateadd(dd,-day(getdate()),dateadd(m,1,getdate())),这样就顺利的解决了问题。

 

测试人员测试之后,似乎这个方法有点问题,最终我将比较的方式也变成了函数,代码如下:

 

<![CDATA[DateDiff(day,dateadd(dd,-day(getdate())+1,getdate()),a.StudyDate) >=0]]>
                and <![CDATA[DateDiff(day,a.StudyDate,dateadd(dd,-day(dateadd(m,1,getdate())),dateadd(m,1,getdate()))) >=0]]>

 <![CDATA[ ]]>,之所以用到这个,是因为我这个sql放在sqlmap里面的,标签里面本身就有“<”和“>”了,a.StudyDate是a表里面的StudyDate字段,即为学习时间,这样居然没问题了,我也有点百思不得其解

posted on 2010-11-29 21:04  大空翼  阅读(13450)  评论(1编辑  收藏  举报

导航