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字段,即为学习时间,这样居然没问题了,我也有点百思不得其解