我将月份存储在SQL Server中为1,2,3,4,…12。我想把它们显示为一月,二月等。在SQL Server中有一个函数像MonthName(1) = 1月?如果可能的话,我尽量避免使用CASE语句。


当前回答

下面是我利用别人的信息来解决问题的方法。

datename(month,dateadd(month,datepart(month,Help_HelpMain.Ticket_Closed_Date),-1)) as monthname

其他回答

SELECT DATENAME(month, GETDATE()) AS 'Month Name'

有点俗气,但应该有用:

SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))

用最好的方式

Select DateName( month , DateAdd( month , @MonthNumber , -1 ))

我认为当你有日期时,这足以得到月名。

SELECT DATENAME(month ,GETDATE())

SQL server中没有系统定义的函数。但是您可以创建自己的用户定义函数—标量函数。您可以在数据库的对象资源管理器中找到标量函数:可编程性->函数->标量值函数。下面,我使用一个表变量将它们结合在一起。

--Create the user-defined function
CREATE FUNCTION getmonth (@num int)
RETURNS varchar(9) --since 'September' is the longest string, length 9
AS
BEGIN

DECLARE @intMonth Table (num int PRIMARY KEY IDENTITY(1,1), month varchar(9))

INSERT INTO @intMonth VALUES ('January'), ('February'), ('March'), ('April'), ('May')
                           , ('June'), ('July'), ('August') ,('September'), ('October')
                           , ('November'), ('December')

RETURN (SELECT I.month
        FROM @intMonth I
        WHERE I.num = @num)
END
GO

--Use the function for various months
SELECT dbo.getmonth(4) AS [Month]
SELECT dbo.getmonth(5) AS [Month]
SELECT dbo.getmonth(6) AS [Month]