月回来(SQL)

时间:2012-11-08 17:03:33

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

我正在尝试在SQL查询中挖掘更多信息,我正在使用它。

Yearmo      Back_1_month
-------     ------------
 201202      201201            Where 201202 is Feb 2012 , 201201 is Jan 2012
 201201      201112            
 201204      201203            
 201212      201211

我很困惑,怎么能为201201做好准备。

5 个答案:

答案 0 :(得分:2)

假设yearmoint

DECLARE @Yearmo INT
SET @Yearmo = 201201

-- First, convert yearmo to a varchar.
-- Next, add a "day" portion to the varchar.
-- Then, convert to a date.
-- Then, subtract a month.
-- Finally, convert back to your original format using char(6).
SELECT CONVERT(
    CHAR(6), 
    (DATEADD(MONTH, -1, CAST(CAST(@YearMo AS VARCHAR) + '01' AS DATETIME))), 
    112
)

答案 1 :(得分:1)

要减去一个月,您可以像这样使用DATEADD

SELECT DATEADD(month, -1, yearmo)

但是,您需要格式化日期,如果不是,则可能需要将yearmo作为日期时间。

答案 2 :(得分:1)

这适用于一个单独的SQL查询:

SELECT CONVERT(VARCHAR(6), DATEADD(month, -1 , convert(datetime, CAST ( 201201 AS VARCHAR(8)) + '01', 112) ) , 112) 

答案 3 :(得分:1)

试试这个:

SELECT yearmo, 
LEFT(CONVERT(CHAR(8), DATEADD(month, -1, CONVERT(datetime, yearmo + '01')), 112), 6)
FROM <YOUR_TABLE>

SQL Fiddle

答案 4 :(得分:0)

您可以使用参数创建一个存储过程作为yearmo,然后将substring(yr)和substring(mo)保存在两个变量中,然后看看,如果substring(mo)为01,则在转换后减少子串(yr)并更改子串(mo)到12,然后追加子串并返回。