日期函数CONVERT和DATEADD的具体应用,求每个月的第一天

原创
小哥 3年前 (2022-10-30) 阅读数 84 #大杂烩

前言:

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

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

1.如下示例所示:

Statdate

Value_id

Value_name

20180808

1000

Test1

20180824

2000

Test2

20180831

3000

Test3

20180730

4000

Test4

20180630

5000

Test5

20180228

6000

Test6

只采集每个月末最后一天的数据,即。表中标记为红色的数据: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

测试结果:

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门