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


当前回答

to_char(to_date(V_MONTH_NUM,'MM'),'MONTH')

其中V_MONTH_NUM是月份号

SELECT to_char(to_date(V_MONTH_NUM,'MM'),'MONTH')  from dual;

其他回答

这个对我很有用:

@MetricMonthNumber (some number)

SELECT 
(DateName( month , DateAdd( month , @MetricMonthNumber - 1 , '1900-01-01' ) )) AS MetricMonthName
FROM TableName

上面的帖子来自@leoinfo和@Valentino Vranken。刚刚做了一个快速选择,它工作。

您可以使用内置的CONVERT函数

select CONVERT(varchar(3), Date, 100)  as Month from MyTable.

这将显示一个月的前3个字符(JAN,FEB等)。

在希伯来语等一些语言环境中,闰月取决于年份,因此为了避免在这些语言环境中出现错误,您可以考虑以下解决方案:

SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')     

为我工作

SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition>

您可以创建一个这样的函数来生成Month和do SELECT dbo.fn_GetMonthFromDate(date_column)作为月份FROM table_name /******对象:UserDefinedFunction [dbo]。[fn_GetMonthFromDate]脚本日期:11/16/2018 10:26:33 AM ******/ 设置ansi_nulls为on 去 设置quoted_identifier为on 去 CREATE FUNCTION [dbo].[fn_GetMonthFromDate] (@date datetime) 返回varchar (50) 作为 开始 声明@monthPart int

SET @monthPart = MONTH(@date) IF @monthPart = 1 BEGIN RETURN 'January' END ELSE IF @monthPart = 2 BEGIN RETURN 'February' END ELSE IF @monthPart = 3 BEGIN RETURN 'March' END ELSE IF @monthPart = 4 BEGIN RETURN 'April' END ELSE IF @monthPart = 5 BEGIN RETURN 'May' END ELSE IF @monthPart = 6 BEGIN RETURN 'June' END ELSE IF @monthPart = 7 BEGIN RETURN 'July' END ELSE IF @monthPart = 8 BEGIN RETURN 'August' END ELSE IF @monthPart = 9 BEGIN RETURN 'September' END ELSE IF @monthPart = 10 BEGIN RETURN 'October' END ELSE IF @monthPart = 11 BEGIN RETURN 'November' END ELSE IF @monthPart = 12 BEGIN RETURN 'December' END RETURN NULL END