Sql Server把一年中的第几天转换成日期!!

Sql Server中的日期函数有很多,总结性的一次性看很多函数也很难记住几个,只有和实际问题相结合使用后才可以记得牢,今天就遇到了一个实际的问题,把一年中的第几天转换成日期?刚拿到这个问题就满脑子疑问,为什么当时记录不直接记录日期而是记录天数?也不管那么多了,就开始在网上查各种时间函数,最后发现DATEADD()函数可以解决这个问题。
下图是数据库里记录的格式,意思是2020年的第148天,现在需要计算2020年的第148天是几月几日:
在这里插入图片描述
DATEADD() 函数在日期中添加或减去指定的时间间隔。DATEADD()函数的参数介绍在

https://www.w3school.com.cn/sql/func_dateadd.asp

现在我们传的参数是

DATEADD(DD,cast(RIGHT(LLBJD8,3) as int)-1,'2016-01-01')
# DD的意思是以天为单位
# cast(RIGHT(LLBJD8,3) as int)-1的意思是取得LLBJD8字段的
# 后三位,然后转换成int,再减一天就是2016年1月1日后第五天
# 而不是1月1日后再加5天
# '2016-01-01'这个字段是开始日期

完整的查询

select distinct [LLBJD8],
	  RIGHT(LLBJD8,3) as days,
	  LEFT(LLBJD8,4) as years,
	  case when LEFT(LLBJD8,4) = 2014 then DATEADD(DD,cast(RIGHT(LLBJD8,3) as int)-1,'2014-01-01')
		   when LEFT(LLBJD8,4) = 2015 then DATEADD(DD,cast(RIGHT(LLBJD8,3) as int)-1,'2015-01-01')
		   when LEFT(LLBJD8,4) = 2016 then DATEADD(DD,cast(RIGHT(LLBJD8,3) as int)-1,'2016-01-01')
		   when LEFT(LLBJD8,4) = 2017 then DATEADD(DD,cast(RIGHT(LLBJD8,3) as int)-1,'2017-01-01')
		   when LEFT(LLBJD8,4) = 2018 then DATEADD(DD,cast(RIGHT(LLBJD8,3) as int)-1,'2018-01-01')
		   when LEFT(LLBJD8,4) = 2019 then DATEADD(DD,cast(RIGHT(LLBJD8,3) as int)-1,'2019-01-01')
		   when LEFT(LLBJD8,4) = 2020 then DATEADD(DD,cast(RIGHT(LLBJD8,3) as int)-1,'2020-01-01')
		   when LEFT(LLBJD8,4) = 2021 then DATEADD(DD,cast(RIGHT(LLBJD8,3) as int)-1,'2021-01-01')
		   end as 日期
  FROM [test_table]

查询结果

LLBJD8	days	years	日期
2015081	081	2015	2015-03-22 00:00:00.000
2015193	193	2015	2015-07-12 00:00:00.000
2015340	340	2015	2015-12-06 00:00:00.000
2015365	365	2015	2015-12-31 00:00:00.000
2016030	030	2016	2016-01-30 00:00:00.000
2016031	031	2016	2016-01-31 00:00:00.000
2016033	033	2016	2016-02-02 00:00:00.000
.
.
.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值