DECLARE @dt datetime
SET @dt=GETDATE()
DECLARE @number int
SET @number=3
--1.指定日期該年的第一天或最后一天
--A. 年的第一天
SELECT CONVERT(char(5),@dt,120)+'1-1'
--B. 年的最后一天
SELECT CONVERT(char(5),@dt,120)+'12-31'
--2.指定日期所在季度的第一天或最后一天
--A. 季度的第一天
SELECT CONVERT(datetime,
??? CONVERT(char(8),
??????? DATEADD(Month,
??????????? DATEPART(Quarter,@dt)*3-Month(@dt)-2,
??????????? @dt),
??????? 120)+'1')
--B. 季度的最后一天(CASE判斷法)
SELECT CONVERT(datetime,
??? CONVERT(char(8),
??????? DATEADD(Month,
??????????? DATEPART(Quarter,@dt)*3-Month(@dt),
??????????? @dt),
??????? 120)
??? +CASE WHEN DATEPART(Quarter,@dt) in(1,4)
??????? THEN '31'ELSE '30' END)
--C. 季度的最后一天(直接推算法)
SELECT DATEADD(Day,-1,
??? CONVERT(char(8),
??????? DATEADD(Month,
??????????? 1+DATEPART(Quarter,@dt)*3-Month(@dt),
??????????? @dt),
??????? 120)+'1')
--3.指定日期所在月份的第一天或最后一天
--A. 月的第一天
SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1')
--B. 月的最后一天
SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1')
--C. 月的最后一天(容易使用的錯誤方法)
SELECT DATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt))
--4.指定日期所在周的任意一天
SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)
--5.指定日期所在周的任意星期幾
--A.? 星期天做為一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)
--B.? 星期一做為一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
1.一個月第一天的
Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
2.本周的星期一
Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
3.一年的第一天
Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
4.季度的第一天
Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
5.當(dāng)天的半夜
Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
6.上個月的最后一天
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
7.去年的最后一天
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
8.本月的最后一天
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
9.本年的最后一天
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
10.本月的第一個星期一
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
返回當(dāng)前日期和時間
通過函數(shù)GETDATE(),你可以獲得當(dāng)前的日期和時間。函數(shù)GETDATE()可以用來作為DATEDIME型字段的缺省值。這對插入記錄時保存當(dāng)時的時間是有用的。要建立一個表,其中的記錄包含有當(dāng)前的日期和時間,可以添加一個DATETIME型字段,指定其缺省值為函數(shù)GETDATE()的返回值,就象這樣:
Create TABLE site_log (
username VARCHAR(40),
useractivity VARCHAR(100),
entrydate DATETIME DEFAULT GETDATE())
轉(zhuǎn)換日期和時間
函數(shù)GETDATE()的返回值在顯示時只顯示到秒。實際上,SQL Sever內(nèi)部時間可以精確到毫秒級(確切地說,可以精確到3.33毫秒)。
要得到不同格式的日期和時間,你需要使用函數(shù)CONVERT()。例如,當(dāng)下面的這個語句執(zhí)行時,顯示的時間將包括毫秒:
Select CONVERT(VARCHAR(30),GETDATE(),9)