2012-08-14 41 views
-1

我有一个数据库列p_name包含MMM-YY(如'JAN-11')形式的月份数据。它是varchar的类型。我怎样才能找到这个数据的前一个月(在'Dec-10'的例子中)?如何查找数据库字符串'JAN-11'的上个月?

+5

说明你正在使用将是有益的,因为可用的日期函数库之间变化的数据库。 – dan1111 2012-08-14 12:18:51

回答

1
Declare @pramDate varchar(10) 
set @pramDate = '01/05/2012' 

SELECT UPPER(LEFT(DateName(month,DATEADD(mm, DATEDIFF(mm, 0, CONVERT(datetime,@pramDate)) - 1, 0)),3)) + 
    '-' + substring(DateName(Year, CONVERT(datetime,@pramDate)) ,3,4) 

只是参考的例子,你会得到你所lookiing什么

3

假设你使用SQL Server:

转换JAN-11datetime对象,减去1个月,然后转换回你的字符串格式。

declare @date nvarchar(10) = 'JAN-11' 

declare @dt datetime = '1-' + @date --Converts to datetime 
SET @dt = DATEADD(m, -1, @dt) --Subtracts 1 month 

RETURN UPPER(REPLACE(RIGHT(CONVERT(nvarchar(9), @dt, 6), 6), ' ', '-')) 
--Returns "DEC-10" 

然后,您可以把这个逻辑到User defined function,并调用它像:

SELECT dbo.PreviousMonth("JAN-11") 
相关问题