一: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 當天半夜
同樣的道理,當天半夜不就是另外一天的開始麼,
和這個月的第一天這些一樣,實際上當天的半夜的命題===今天的第乙個小時《語文不好,感覺有點啥》
------
如果這些命題都不是提的第一天,第一小時啥的,而是最後一天,最後一小時呢???
^_^------
C語言巨集的特殊用法和幾個坑
2 years ago source 總結一下c語言中巨集的一些特殊用法和幾個容易踩的坑。由於本文主要參考gcc文件,某些細節 如巨集引數中的空格是否處理之類 在別的編譯器可能有細微差別,請參考相應文件。巨集僅僅是在c預處理階段的一種文字替換工具,編譯完之後對二進位制 不可見。基本用法如下 1.標示...
幾個有用的T SQL 1
清除所有表記錄,有點像reset,保留constraints與identities.disable constraints triggersexec sp msforeachtable alter table nocheck constraint all exec sp msforeachtable...
T SQL中Case的用法
case語句是條件判斷語句的一種,可以完成比if語句更強的判斷,可以解決if語句中巢狀過多的問題。語法 case when 條件a then 結果a when 條件b 結果b else 結果n end 和decode 不同的是,decode 只能針對固定的值,而 case 可以用不是固定值,需是乙個...