--
日期转换参数,值得收藏
select CONVERT ( varchar , getdate (), 120 )
2004 - 09 - 12 11 : 06 : 08
select replace ( replace ( replace ( CONVERT ( varchar , getdate (), 120 ), ' - ' , '' ), ' ' , '' ), ' : ' , '' )
20040912110608
select CONVERT ( varchar ( 12 ) , getdate (), 111 )
2004 / 09 / 12
select CONVERT ( varchar ( 12 ) , getdate (), 112 )
20040912
select CONVERT ( varchar ( 12 ) , getdate (), 102 )
2004.09 . 12
-- 一个月第一天
SELECT DATEADD (mm, DATEDIFF (mm, 0 , getdate ()), 0 ) -- 2009-06-01 00:00:00.000
-- 当天
select * from product where DateDiff ( day ,modiDate, GetDate ()) > 1
-- 如何查询本日、本月、本年的记录SQL
本年:
select * from loanInfo where year (date) = year ( getdate ())
本月:
select * from loanInfo where year (date) = year ( getDate ()) And month (date) = month ( getdate ())
本日:
select * from loanInfo where year (date) = year ( getDate ()) And month (date) = month ( getdate ()) and Day (date) = Day ( getDate ())
昨天的记录:
datediff(day,[Datetime],getdate())=1 把Datetime换为你的相应字段,getdate()-Datetime即为时间差。
本月记录:
SELECT * FROM 表 WHERE datediff(month,[dateadd],getdate())=0
本周记录:
SELECT * FROM 表 WHERE datediff(week,[dateadd],getdate())=0
本日记录:
SELECT * FROM 表 WHERE datediff(day,[dateadd],getdate())=0
本周的星期一 SELECT DATEADD (wk, DATEDIFF (wk, 0 , getdate ()), 0 )
一年的第一天 SELECT DATEADD (yy, DATEDIFF (yy, 0 , getdate ()), 0 )
季度的第一天 SELECT DATEADD (qq, DATEDIFF (qq, 0 , getdate ()), 0 )
当天的半夜 SELECT DATEADD (dd, DATEDIFF (dd, 0 , getdate ()), 0 )
上个月的最后一天
这是一个计算上个月最后一天的例子。它通过从一个月的最后一天这个例子上减去毫秒来获得。有一点要记住,在Sql Server中时间是精确到毫秒。这就是为什么我需要减去毫秒来获得我要的日期和时间。
SELECT dateadd (ms, - 3 , DATEADD (mm, DATEDIFF (mm, 0 , getdate ()), 0 ))
计算出来的日期的时间部分包含了一个Sql Server可以记录的一天的最后时刻(“: 59 : 59 : 997 ”)的时间。
去年的最后一天
连接上面的例子,为了要得到去年的最后一天,你需要在今年的第一天上减去毫秒。
SELECT dateadd (ms, - 3 , DATEADD (yy, DATEDIFF (yy, 0 , getdate ()), 0 ))
本月的最后一天
现在,为了获得本月的最后一天,我需要稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“ - 01 - 01 ”返回的时间间隔上加。通过加个月,我计算出下个月的第一天,然后减去毫秒,这样就计算出了这个月的最后一天。这是计算本月最后一天的SQL脚本。
SELECT dateadd (ms, - 3 , DATEADD (mm, DATEDIFF (m, 0 , getdate ()) + 1 , 0 ))
本年的最后一天
你现在应该掌握这个的做法,这是计算本年最后一天脚本
SELECT dateadd (ms, - 3 , DATEADD (yy, DATEDIFF (yy, 0 , getdate ()) + 1 , 0 ))。
本月的第一个星期一
好了,现在是最后一个例子。这里我要计算这个月的第一个星期一。这是计算的脚本。
select DATEADD (wk, DATEDIFF (wk, 0 ,
dateadd (dd, 6 - datepart ( day , getdate ()), getdate ())
), 0 )
在这个例子里,我使用了“本周的星期一”的脚本,并作了一点点修改。修改的部分是把原来脚本中“ getdate ()”部分替换成计算本月的第天,在计算中用本月的第天来替换当前日期使得计算可以获得这个月的第一个星期一。
-- 删除一个月前,三个月前, 6个月前,一年前的数据
DELETE FROM 表名WHERE datediff (MM, AddTime, GETDATE ()) > 1
DELETE FROM 表名WHERE datediff (MM, AddTime, GETDATE ()) > 3
DELETE FROM 表名WHERE datediff (MM, AddTime, GETDATE ()) > 6
DELETE FROM 表名WHERE datediff (YY, AddTime, GETDATE ()) > 1
-- -------------------------------------------------------------
附录,其他日期处理方法
1 )去掉时分秒
declare @ datetime
set @ = getdate () -- '2003-7-1 10:00:00'
SELECT @, DATEADD ( day , DATEDIFF ( day , 0 ,@), 0 )
2 )显示星期几
select datename (weekday, getdate ())
3 )如何取得某个月的天数
declare @m int
set @m = 2 -- 月份
select datediff ( day , ' 2003- ' + cast ( @m as varchar ) + ' -15 ' , ' 2003- ' + cast ( @m + 1 as varchar ) + ' -15 ' )
另外,取得本月天数
select datediff ( day , cast ( month ( GetDate ()) as varchar ) + ' - ' + cast ( month ( GetDate ()) as varchar ) + ' -15 ' , cast ( month ( GetDate ()) as varchar ) + ' - ' + cast ( month ( GetDate ()) + 1 as varchar ) + ' -15 ' )
任意月份的最大天数
select day ( dateadd (dd, - 1 , dateadd (mm, 1 , Dateadd (mm, datediff (mm, 0 , getdate ()), 0 ))))
或者使用计算本月的最后一天的脚本,然后用DAY函数区最后一天
SELECT Day ( dateadd (ms, - 3 , DATEADD (mm, DATEDIFF (m, 0 , getdate ()) + 1 , 0 )))
4 )判断是否闰年:
SELECT case day ( dateadd (mm, 2 , dateadd (ms, - 3 , DATEADD (yy, DATEDIFF (yy, 0 , getdate ()), 0 )))) when 28 then ' 平年 ' else ' 闰年 ' end
或者
select case datediff ( day , datename ( year , getdate ()) + ' -02-01 ' , dateadd (mm, 1 , datename ( year , getdate ()) + ' -02-01 ' ))
when 28 then ' 平年 ' else ' 闰年 ' end
5 )一个季度多少天
declare @m tinyint , @time smalldatetime
select @m = month ( getdate ())
select @m = case when @m between 1 and 3 then 1
when @m between 4 and 6 then 4
when @m between 7 and 9 then 7
else 10 end
select @time = datename ( year , getdate ()) + ' - ' + convert ( varchar ( 10 ), @m ) + ' -01 '
select datediff ( day , @time , dateadd (mm, 3 , @time ))
1 、确定某年某月有多少天
实现原理:先利用DATEDIFF取得当前月的第一天,再将月份加一取得下月第一天,然后减去分钟,再取日期的天数部分,即为当月最大日期,也即当月天数
CREATE FUNCTION DaysInMonth ( @date datetime ) Returns int
AS
BEGIN
RETURN Day ( dateadd (mi, - 3 , DATEADD (m, DATEDIFF (m, 0 , @date ) + 1 , 0 )))
END
调用示例:
select dbo.DaysInMonth ( ' 2006-02-03 ' )
( 2 )计算哪一天是本周的星期一
SELECT DATEADD (week, DATEDIFF (week, ' 1900-01-01 ' , getdate ()), ' 1900-01-01 ' ) -- 返回-11-06 00:00:00.000
或
SELECT DATEADD (week, DATEDIFF (week, 0 , getdate ()), 0 )
( 3 )当前季度的第一天
SELECT DATEADD (quarter, DATEDIFF (quarter, 0 , getdate ()), 0 )—返回 - 10 - 01 00 : 00 : 00.000
( 4 )一个季度多少天
declare @m tinyint , @time smalldatetime
select @m = month ( getdate ())
select @m = case when @m between 1 and 3 then 1
when @m between 4 and 6 then 4
when @m between 7 and 9 then 7
else 10 end
select @time = datename ( year , getdate ()) + ' - ' + convert ( varchar ( 10 ), @m ) + ' -01 '
select datediff ( day , @time , dateadd (mm, 3 , @time )) —返回