T-SQL的幾個特殊用法(一)
來源:互聯網
上載者:User
一: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 當天半夜
同樣的道理,當天半夜不就是另外一天的開始麼,
和這個月的第一天這些一樣,實際上當天的半夜的命題===今天的第一個小時《語文不好,感覺有點啥》
------
如果這些命題都不是提的第一天,第一小時啥的,而是最後一天,最後一小時呢???
^_^
------