时间函数CONVERT和DATEADD的实际应用,求每个月最后一天

我要在数据库中查询昨天和上月最后一天的数据,在网上找例子,解决如下

        String sLastTime="";
        if(bMonth){
            sLastTime =  " AND DATEADD(Day,-1,CONVERT(varchar(8),'"2021-09-02"',120)+'01') = 数据库时间字段";  //上月最后一天
        }else{
            sLastTime = " AND DATEADD(DAY,-1,'"2021-09-02"')=数据库时间字段";  //昨天
        }

String sql = " SELECT * FROM  tableName WHERE 1=1 " + sLastTime ;

以下是我参考网上的例子:

前言:

         在实际工作中,经常遇到求一些特殊时间的提取数据要求。

其中一个需求,要求某时间字段,所获取数据的时间都是每个月的最后一天。

一、以下举例说明:

 

只取每个月末最后一天的数据,即表格中标为红色的数据:20180831/20180630/20180228这三天的数据。

1、建表语句:

create TABLE [dbo].[test_ceshi](

    [statdate]        [varchar](8) NULL,

    [Value_id]       [decimal](20, 4) NULL,

    [Value_name] [varchar](10) NULL

)

2、插入数据:

insert into  [test_ceshi] values ('20180808',1000,'Test1')

insert into  [test_ceshi] values ('20180824',2000,'Test2')

insert into  [test_ceshi] values ('20180831',3000,'Test3')

insert into  [test_ceshi] values ('20180730',4000,'Test4')

insert into  [test_ceshi] values ('20180630',5000,'Test5')

insert into  [test_ceshi] values ('20180228',6000,'Test6')

使用以下SQL语句即可查询所需要的数据:

select * from test_ceshi a where a.statdate  in

(select   convert(varchar(8),DATEADD(Day,-1,CONVERT(varchar(8),DATEADD(Month,1,statdate),120)+'01'),112) 

from test_ceshi)

 此语句使用了函数dateadd和convert时间函数

DATEADD(Month,1,statdate)
----将时间增加一个月  20180808---->20180908
CONVERT(varchar(8),DATEADD(Month,1,statdate),120)
----将得到时间20180908转化格式120并截断8位,得到字符串结果:'2018-09-'
CONVERT(varchar(8),DATEADD(Month,1,statdate),120)+'01'
----将字符串结果:'2018-09-'加上01,得到字符串结果:'2018-09-01'
DATEADD(Day,-1,CONVERT(varchar(8),DATEADD(Month,1,statdate),120)+'01')
----将字符串’2018-09-01’转化成时间格式并减去一天,变成2018-08-31
convert(varchar(8),DATEADD(Day,-1,CONVERT(varchar(8),DATEADD(Month,1,statdate),120)+'01'),112)
----将时间格式的2018-08-31,转化为112格式的字符串20180831


补充一个自定义的函数,可以直接拿过用:

CREATE  FUNCTION  dbo.function_test_ceshi(@statdate_into   varchar(8))  
 
RETURNS varchar(8)    --返回返回值的数据类型
 
AS
 
BEGIN
 
declare @statdate_result varchar(8)
 
select @statdate_result =convert(varchar(8),DATEADD(Day,-1,CONVERT(varchar(8),DATEADD(Month,1,@statdate_into),120)+'01'),112) 
   
RETURN  @statdate_result
 
END
测试结果:


版权声明:本文为优快云博主「蓝星部队」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/lanxingbudui/article/details/81702708

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值