【问题标题】:Converting nvarchar (mm/yyyy) to DateTIme in Sql Server在 Sql Server 中将 nvarchar (mm/yyyy) 转换为 DateTIme
【发布时间】:2017-02-20 14:41:53
【问题描述】:

我在 Sql Server 表中有一个 nvarchar 列,它以 mm/yyyy 格式存储日期值。

示例:03/2017

现在如何将此字符串转换为日期时间,以便我可以将此日期时间与当前日期时间进行比较(仅比较月份和年份)

【问题讨论】:

  • 选择 RDBMS、mySQL 还是 SQL Server?
  • SQL Server 2008

标签: sql .net sql-server


【解决方案1】:

我们可以拆分并实现这一点,如下所示:

declare @v varchar(7)
select @v = '03.2017'

select convert(datetime,right(@v,4) + left(@v,2) + '01')

【讨论】:

    【解决方案2】:

    试试

    Convert(datetime,'01/' + [field],103)
    

    【讨论】:

      【解决方案3】:
      declare @strDate nvarchar(10) = '03/2017'
      declare @newDate datetime = null
      
      select @newDate=  convert(date,replace(@strDate,'/','/1/'))
      
      select month (@newdate)
      select year (@newdate)
      

      --现在进行比较。----

      【讨论】:

        【解决方案4】:

        使用左和右:

        SELECT CONVERT(DATETIME, RIGHT('03/2017', 4) + '-' + LEFT('03/2017', 2) + '-01')
        

        【讨论】:

          【解决方案5】:

          如前所述,解析字符串是正确的方法,但我将添加此方法,因为它还显示获取当前月份的第一天进行比较,并且在原始帖子中提到。

          DECLARE @test varchar(10) = '03/2017'
          
          DECLARE @firstOfMonth datetime 
          DECLARE @toCompare datetime 
          
          SELECT @firstOfMonth = 
              CAST(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '/' + CAST(MONTH(GETDATE()) AS VARCHAR(2)) + '/01' AS DATETIME)
          
          SELECT @toCompare = CONVERT(datetime, right(@test, 4) + '-' + left(@test, 2) + '-01')
          

          【讨论】:

            【解决方案6】:

            嗯,也许我头脑很清醒,但看起来 OP 并不想将 NVARCHAR 值实际转换为日期时间......他只是想比较来自 @ 的月份和年份将 987654322@ 值转换为 MONTH()YEAR() 的实际 DATETIME 值,并且措辞有点糟糕......

            国际海事组织,真正的答案是您不能将 MM/YYYY 本身转换为 DATETIME 值,这就是为什么每个人都试图添加月初的原因;但是为什么不做这样的事情......

            SELECT *
            FROM <sometable>
            WHERE MONTH(<sometable>.<somecolumn>) = LEFT('03/2017',2)
            AND YEAR(<sometable>.<somecolumn>) = RIGHT('03/2017',4)
            ;
            

            而且由于 OP 还询问“当前日期时间,仅比较月份和年份”,您可以这样做...

            SELECT *
            FROM <sometable>
            WHERE MONTH(GETDATE()) = LEFT(<somecolumn>,2)
            AND YEAR(GETDATE()) = RIGHT(<somecolumn>,4)
            ;
            

            认为这就是他要问的……?也许?

            【讨论】:

              猜你喜欢
              • 2013-07-22
              • 2019-06-05
              • 2018-01-08
              • 2013-06-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-05-04
              • 2018-10-28
              相关资源
              最近更新 更多