TSQL的几个特殊用法(一)

一:DateAdd与DateDiff的用法。
 DateAdd(interval,number,date),通过interval格式为date加上值number
 DateDiff(interval,date1,date2),计算date1和date2之间的interval差距。
 在T-SQL中,日期类型的0表示的值是1900-01-01,可以用  select convert(datetime,0)来得出。
 那么,如果要计算当前月的第一天的日期,该怎么做呢?
 思路:首先,与原始日期0 DateAdd mm<月份>格式的number后,输出的所得的mm值后月份的1号,也就是第一天。
 因此,我们可以先计算当前月与0之间的月份差:
    DateDiff(mm,0,getdate())    当前是8月份,经计算得出的结果是1303,也就是与1900-01相关1303个月。
 接着我们再在原始基础上加上这1303个月
    DateAdd(mm,1303,0)   得出的结果是:2008-08-01 00:00:00 0000
 因此:一句SQL语句可以得出:
   select DateAdd(mm,DateDiff(mm,0,getdate()),0) as 这个月第一天
------
 同理,跟第一天,周一,第一个月,季度第一天,一年第一天都可以同样的方式。只不过interval更改一下就可以
 例:这周的第一天:
 select DateAdd(wk,DateDiff(wk,0,getdate()),0) as 周一
 select DateAdd(yy,DateDiff(yy,0,getdate()),0) as 今年第一天
------
有一个比较特殊的,当天的半夜怎么弄??
很简单的,半夜不就==12点整么,12点整不就是另外一天了么?
因此,
select DateAdd(dd,DateDiff(dd,0,getdate()),0) as 当天半夜
同样的道理,当天半夜不就是另外一天的开始么,
和这个月的第一天这些一样,实际上当天的半夜的命题===今天的第一个小时《语文不好,感觉有点啥》
------
如果这些命题都不是提的第一天,第一小时啥的,而是最后一天,最后一小时呢???
    ^_^
------
原文地址:https://www.cnblogs.com/McJeremy/p/1271584.html