0

我正在尝试在 SQL 查询中挖掘更多内容,我同意了。

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

我很困惑,怎么能做到201201。

4

5 回答 5

2

假设这yearmo是一个int

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
)
于 2012-11-08T17:12:14.163 回答
1

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

SELECT DATEADD(month, -1, yearmo)

但是你需要格式化你的日期,yearmo如果不是,你可能需要转换为日期时间。

于 2012-11-08T17:07:43.317 回答
1

这适用于一个 sql 查询:

SELECT CONVERT(VARCHAR(6), DATEADD(month, -1 , convert(datetime, CAST ( 201201 AS VARCHAR(8)) + '01', 112) ) , 112) 
于 2012-11-08T17:15:38.090 回答
1

试试这个:

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

SQL小提琴

于 2012-11-08T17:25:32.117 回答
0

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

于 2012-11-08T17:15:13.410 回答