上个月只需要在sql中获取3个字母JUL

上个月只需要在sql中获取3个字母JUL,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我想打印JUL,此查询返回AUG: declare @a varchar(19) set @a = left(datename(month, getdate()), 3) print @a 但是当我把代码写成 declare @a varchar(19) set @a = left(datename(month, getdate()), 3) - 1 print @a 我得到一个错误: Msg 245,第16级,状态1,第3行 将nvarchar值“Aug”转换为数据类型为int的列

我想打印JUL,此查询返回AUG

declare @a varchar(19)

set @a = left(datename(month, getdate()), 3)

print @a
但是当我把代码写成

declare @a varchar(19)

set @a = left(datename(month, getdate()), 3) - 1

print @a
我得到一个错误:

Msg 245,第16级,状态1,第3行
将nvarchar值“Aug”转换为数据类型为int的列时出现语法错误

getdate()
将当前数据库系统时间戳作为日期时间值返回

因为当前月份是八月,所以它给出了八月

set @a=left(datename(month,getdate()),3)-1
上述声明不会在8月至7月期间生效


您正试图从
varchar
类型中减去1。因此出现错误。

您需要先将当前日期减去1个月,然后将其转换为“日期名称”:


非常感谢。marc它的工作原理与我预期的一样,只是我们必须编辑sysdatetime to getdate()@RedDevil:
sysdatetime()
应该在SQL Server 2008中可用,并且它比
getdate()更受欢迎。
DECLARE @a VARCHAR(19)

SET @a = LEFT(DATENAME(MONTH, DATEADD(MONTH, -1, SYSDATETIME())), 3) 

PRINT @a