【问题标题】:Convert month and year combination to date in SQL在 SQL 中将月份和年份组合转换为日期
【发布时间】:2014-04-04 00:23:48
【问题描述】:

我在不同的列中有月份和年份,我想在两点之间记录(即开始日期和结束日期)。我只有一个月和一年。我发现的一种解决方案是将日期、月份组合转换为日期。假设我有

Start month : 3 Start year : 2010
End month : 6 End year : 2013

我想将它们转换为

 start date = 01-03-2010 

 End date = 31-06-2013

有什么解决办法吗?

【问题讨论】:

标签: sql sql-server sql-server-2008


【解决方案1】:

这是一种方法:

select convert(date, cast(startyear*10000 + startmon*100 + 1 as varchar(8)), 112)
. . .

【讨论】:

    【解决方案2】:

    正如 Marc B 所说,结束月份会很困难,因为您需要弄清楚指定年份/月份的最后一天是什么。

    试试这个

    DECLARE @StartMonth INT = 3 
    DECLARE @StartYear INT = 2010 
    DECLARE @EndYear INT = 2013 
    DECLARE @EndMonth INT = 6 
    
    SELECT Dateadd(year, @StartYear - 2000,Dateadd(month, @StartMonth - 1, '20000101')) AS StartDate, 
           Dateadd(year, @EndYear - 2000, Dateadd(month, @EndMonth - 1, '20000101')) AS EndDate
    

    【讨论】:

      【解决方案3】:

      如果日期部分存储为整数,您可以执行简单的操作,例如将它们转换为 varchar、连接并再次转换。例如:

      DECLARE @StartYear INT = 2012
      DECLARE @StartMOnth INT = 6
      
      SELECT CAST(CAST(@StartYear AS CHAR(4)) + '-' + CAST(@StartMonth AS VARCHAR(2)) + '-01' AS DATE)
      

      在结束日期,您可以使用 CASE 语句来确定该月的最后一天。不要忘记闰年。

      【讨论】:

        【解决方案4】:

        以下是通过月份和年份查找月份最后一个日期和第一个日期的方法

        DECLARE @month varchar(2)
        DECLARE @year varchar(4)
        

        每月的第一个日期

        set @month='03'
        set @year='2010'
        select cast(@year + '-' + @month + '-01' as date)
        

        输出

        2010-03-01
        

        一个月的最后一天(将您的月份加 1,然后减 1 天)

        set @month='06'
        set @year='2013'
        select CAST(cast(@year + '-' + Cast(cast(@month as int )+1 as varchar(20)) + '-01' as datetime)-1 as DATE)
        

        输出

        2013-06-30
        

        【讨论】:

          【解决方案5】:

          SqlServer 2012 及更高版本支持 DATEFROMPARTS()。可以这样做:

              DECLARE @Month as int, @Year as int
              SET @Month = 8
              SET @Year = 2018
              SELECT DATEFROMPARTS(@Year,@Month,'01')
          

          要获取月份的最后日期,您可以使用 EOMONTH() 如下:

              SELECT EOMONTH(DATEFROMPARTS(@Year,@Month,'01'))
          

          【讨论】:

            【解决方案6】:

            可以使用sql函数

            Select cast(('01-'+h.[monthyear]) as date) from table1 h
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-04-09
              • 2018-12-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-01-27
              相关资源
              最近更新 更多