SQL添加零值的整数字符串

时间:2015-11-20 12:04:52

标签: sql-server string tsql addition

我正在尝试添加整数字符串。我有201404作为输入,我需要它转换为201503所以唯一的方法是将年(2014)增加1并将02月减1。 我已经尝试过以下但本月的前导零似乎没有保留:

DECLARE @YearMonth INT = 201404
    , @left INT = 0
    , @right INT = 0

SET @YearMonth = CAST(@YearMonth AS VARCHAR(6))
SET @left = CAST(LEFT(@YearMonth, 4) + 1 AS VARCHAR(MAX))
SET @right = RIGHT(@YearMonth, 2) - 1
SET @right = CAST(@right AS VARCHAR(2))
SET @right = RIGHT(('0' + CAST(@right AS VARCHAR(2))), 2)

PRINT @left
PRINT RIGHT('0' + LTRIM(RTRIM(@right)), 6)

4 个答案:

答案 0 :(得分:1)

在添加和减去月份时,处理整数YYYYMM格式可能会很困难。一种方法是转换为几个月,然后转换回格式。因此,这会将值转换为若干个月

select (@YearMonth / 100) * 12 + (@YearMonth % 100)

然后我们可以添加一个数字,例如11并转换回整数格式:

select (( (@YearMonth / 100) * 12 + (@YearMonth % 100) + 11) / 12) * 100 +
        ( (@YearMonth / 100) * 12 + (@YearMonth % 100) + 11) % 12)
       ) as yyyymm

另一种可能更简单的方法是使用日期算术:

select dateadd(11, month, cast(@YearMonth as varchar(255)) + '01')

返回日期。您可以将其转换回数字:

select (year(dateadd(11, month, cast(@YearMonth as varchar(255)) + '01')) * 100 +
        month(dateadd(11, month, cast(@YearMonth as varchar(255)) + '01'))
       ) as yyyymm

答案 1 :(得分:0)

使用REPLICATE

复制(' 0',2 - len(@right))+ @right

答案 2 :(得分:0)

跑了这个:

DECLARE @YearMonth INT = 201404;

SELECT CONVERT(VARCHAR(6), DATEPART(YEAR, T.Data) + 1) + RIGHT(100 + DATEPART(MONTH, T.Data) -1, 2)
FROM (VALUES (CONVERT(VARCHAR(8), @YearMonth) + '01')) AS T(Data);

结果:

201503

它会选择月份编号并为其添加100,然后从中选择2个右边的字符,例如你得到4,它变为104,然后RIGHT函数选择最后2个字符,这是04

与其他参数一起检查,似乎很好:

DECLARE @YearMonth INT = 201411;

SELECT CONVERT(VARCHAR(6), DATEPART(YEAR, T.Data) + 1) + RIGHT(100 + DATEPART(MONTH, T.Data) -1, 2)
FROM (VALUES (CONVERT(VARCHAR(8), @YearMonth) + '01')) AS T(Data);

结果:

201510

答案 3 :(得分:0)

我会隐式转换为日期,添加11个月,然后格式化为字符串。整数转换也是隐含的。

select format(dateadd(month, 11, str(@YearMonth) + '01'), 'yyyyMM')