Sql server 基于月份和年份获取日期字段
我有两个字段,Period和YR,Period表示月份。我希望能够选择这些记录作为日期字段,并假设该天是该月的最后一天。例如:Sql server 基于月份和年份获取日期字段,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我有两个字段,Period和YR,Period表示月份。我希望能够选择这些记录作为日期字段,并假设该天是该月的最后一天。例如: YR Period Date 2017 1 2017-01-31 2017 2 2017-02-28 Etc 我不知道如何着手做这件事。谢谢你能提供的帮助 选择年、期、月(DATEFROMPARTS(年、期、1))作为[日期] SELECT YR, Period, EOMONTH(DATEFROMPART
YR Period Date
2017 1 2017-01-31
2017 2 2017-02-28
Etc
我不知道如何着手做这件事。谢谢你能提供的帮助 选择年、期、月(DATEFROMPARTS(年、期、1))作为[日期]
SELECT YR, Period, EOMONTH(DATEFROMPARTS(YR, Period, 1)) AS [Date]
FROM <<table>>
从…起
选择年、期间、月(DATEFROMPARTS(年、期间、1))作为[日期]
从…起
以下是使用“基本”功能的方法:
; with data as (
select 2017 as yr, 1 as period
union all
select 2017 as yr, 2 as period
)
, temp as (
select
yr,
period,
dateadd(day, -1, dateadd(month, 1,
convert(datetime, cast(yr*10000 + period*100 + 1 as varchar))
)
) as test
from data
)
select yr, period, convert(varchar(10), test, 126) from temp
这就是使用“基本”功能的方法:
; with data as (
select 2017 as yr, 1 as period
union all
select 2017 as yr, 2 as period
)
, temp as (
select
yr,
period,
dateadd(day, -1, dateadd(month, 1,
convert(datetime, cast(yr*10000 + period*100 + 1 as varchar))
)
) as test
from data
)
select yr, period, convert(varchar(10), test, 126) from temp
下面是另一个问题:
WITH tb(YR,Period)AS(
SELECT 2017,1 UNION ALL
SELECT 2017,2 UNION ALL
SELECT 2017,3
)
SELECT DATEADD(DAY,-1,DATEADD(MONTH,tb.Period+1, DATEADD( YEAR, YR-1900,0))) FROM tb
-----------------------
2017-02-28 00:00:00.000
2017-03-31 00:00:00.000
2017-04-30 00:00:00.000
下面是另一个问题:
WITH tb(YR,Period)AS(
SELECT 2017,1 UNION ALL
SELECT 2017,2 UNION ALL
SELECT 2017,3
)
SELECT DATEADD(DAY,-1,DATEADD(MONTH,tb.Period+1, DATEADD( YEAR, YR-1900,0))) FROM tb
-----------------------
2017-02-28 00:00:00.000
2017-03-31 00:00:00.000
2017-04-30 00:00:00.000
@SqlZim感谢您的建议;还有一件事,与其构建一个yyyy-m-dd字符串,不如构建一个yyyyymmdd字符串。yyyy-mm-dd版,我完全错过了@SqlZim感谢您的建议;还有一件事,与其构建一个yyyy-m-dd字符串,不如构建一个yyyyymmdd字符串。yyyy-mm-dd版,我完全错过了!