日期转换参数,值得收藏


-- 日期转换参数,值得收藏
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 )) —返回



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值