日期函数CONVERT和DATEADD的具体应用,求每个月的第一天
原创前言:
在实际工作中,我们经常会遇到一些特殊的时间提取数据要求。
其中一个要求需要一定的时间字段,获取数据的时间是每个月的最后一天。
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
测试结果:
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除