在SQL中将月份编号转换为月份名称函数

我有几个月存储在SQL Server作为1,2,3,4,… 12。 我想把它们显示为1月,2月等。是否有像SQL Server中的函数MonthName(1)= January? 如果可能,我试图避免CASE语句。

有点哈克,但应该工作:

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

我认为这是获得月份名称的最佳方式

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

[编辑]

正如下面的Asif所说,另一种做法是

 Select DateName( month , DateAdd( month , @MonthNumber , -1 ) ) 
 SELECT DATENAME(month, GETDATE()) AS 'Month Name' 
 SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3) 

使用最好的方法

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

这很简单。

 select DATENAME(month, getdate()) 

输出:一月

以下为我工作:

CAST(GETDATE()作为CHAR(3))

除原来的

SELECT DATENAME(m, str(2) + '/1/2011')

你可以这样做

SELECT DATENAME(m, str([column_name]) + '/1/2011')

这样你可以得到表中所有行的名字。 其中[column_name]表示包含数值1到12的整数列

2代表任何整数,由联系人string我创build一个date,我可以提取月份。 '/ 1/2011'可以是任何date

如果你想用variables做这个

 DECLARE @integer int; SET @integer = 6; SELECT DATENAME(m, str(@integer) + '/1/2011') 

使用此语句将月份数值转换为月份名称。

 SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE())) 

在一些像希伯来语这样的语言环境中, 闰年依赖于年份,所以为了避免在这样的语言环境中出现错误,您可以考虑采用以下解决scheme:

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

您可以使用内置的CONVERTfunction

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

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

你可以使用转换functin如下

 CONVERT(VARCHAR(3), DATENAME(MM, GETDATE()), 100) 

这将肯定工作 – selectdate名称(M,GETDATE())

只要从今天的date减去当前月份,然后加回你的月份数字。 然后使用date名称函数在1行中给出全名。

 print datename(month,dateadd(month,-month(getdate()) + 9,getdate())) 

当我有date的时候,我认为这足以得到月份的名字。

 SELECT DATENAME(month ,GETDATE()) 

要将月份编号转换为月份名称,请尝试下面的内容

 declare @month smallint = 1 select DateName(mm,DATEADD(mm,@month - 1,0)) 

这个为我工作:

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

来自@leoinfo和@Valentino Vranken的post。 只做了一个快速select,它的工作原理。

 Declare @MonthNumber int SET @MonthNumber=DatePart(Month,GETDATE()) Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 ) 

阐释:

  1. 第一个DecalrevariablesMonthNumber
  2. 获取返回月份编号的DatePart当前月份
  3. 第三个查询返回月份名称

SELECT DATENAME(MONTH,dateadd(month,-3,getdate()))

为我工作

 SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition> 
 SELECT DateName(M, DateAdd(M, @MONTHNUMBER, -1)) 
 select monthname(curdate()); 

要么

 select monthname('2013-12-12'); 

使用此语句获取月份名称:

 DECLARE @date datetime SET @date='2015/1/4 00:00:00' SELECT CAST(DATENAME(month,@date ) AS CHAR(3))AS 'Month Name' 

这会给你简短的月份名称。 像这样:1月,2月,3月等

这是我的解决scheme,利用别人的一些信息来解决问题。

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

SQL服务器中没有系统定义的function。 但是您可以创build自己的用户定义函数 – 标量函数。 您可以在对象资源pipe理器中为数据库find标量函数:可编程性 – >函数 – >标量值函数。 下面,我使用一个表variables来把它们放在一起。

 --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] 

你可以得到这样的date。 例如: – 用户

 id name created_at 1 abc 2017-09-16 2 xyz 2017-06-10 

你可以得到像这样的月份名称

 select year(created_at), monthname(created_at) from users; 

产量

 +-----------+-------------------------------+ | year(created_at) | monthname(created_at) | +-----------+-------------------------------+ | 2017 | september | | 2017 | june | 
 to_char(to_date(V_MONTH_NUM,'MM'),'MONTH') 

其中V_MONTH_NUM是月份编号

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

使用这个语句

 SELECT TO_CHAR(current_date,'dd MONTH yyyy') FROM dual 

这会将月份数字转换为月份完整string