Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 基于月份和年份获取日期字段_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql server 基于月份和年份获取日期字段

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

我有两个字段,Period和YR,Period表示月份。我希望能够选择这些记录作为日期字段,并假设该天是该月的最后一天。例如:

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版,我完全错过了!