SQL Server为yyyymm添加2年

时间:2014-05-11 03:16:59

标签: sql-server int

SELECT LEFT(201404, 4) + 2 

仅给我2016年,我希望结果为int: 201604

我该怎么做?

5 个答案:

答案 0 :(得分:1)

DECLARE @String VARCHAR(6) = '201404';
SELECT CAST((CAST(LEFT(@String, 4) AS INT) + 2) AS VARCHAR(4))  + RIGHT(@String, 2) 

答案 1 :(得分:1)

它并不像你想象的那么难

SELECT 201404 + 2*100

答案 2 :(得分:1)

您真的需要了解所涉及的dataypes。您是否在表格中的VARCHARINT字段上执行此操作?

这样做的可靠方法(即跨越年界并将给出结果201412 + 2 = 201502,而不是201414)是转换为日期,使用dateadd添加月份,然后转换回来。

此示例假定它存储为VARCHAR

首先添加01到最后确实给它一个假日,并使它看起来像一个完整的日期:

SELECT YourField+'01'

现在使用代码112(格式为yyyymmdd)

将其转换为日期
SELECT CONVERT(
    DATE,
    YourField+'01',
    112
    )

现在增加两个月:

SELECT 
    DATEADD(mm,2,
      CONVERT(
        DATE,
        YourField+'01',
        112
      )
    )

现在转换回varchar,将其修剪为6个字符(修剪尾随01:

SELECT 
    CONVERT(VARCHAR(6),
      DATEADD(mm,2,
        CONVERT(
          DATE,
          YourField+'01',
          112
        )
      ),
    112)

答案 3 :(得分:0)

您几乎肯定会使用datetime字段,或者如果使用较新版本的sql日期字段。

然后使用dateadd()例如

select dateadd(year, '2014-04-01', 2)

然后,您可以使用convert()将最终结果转换为许多不同的字符串格式(如果需要)。或者您可以使用datepart()来提取年,月等等。

我假设您的示例有点混乱,因为201404不是真正有效的日期格式。我的例子是基于假设你是指本月的第一个

答案 4 :(得分:0)

试试这个

select convert(varchar(6),dateadd(year,2,cast(cast(201404 as varchar)+'01' as date)),112)