在SQL中转换月号到月名函数

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

1191554 次浏览

有点俗气,但应该有用:

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

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

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

我认为这是当你有月数时获得月的名字的最佳方法

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

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

你可以使用内置的CONVERT函数

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

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

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

你可以像下面那样使用convert函数

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

除了原来的

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

你可以这样做

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

通过这种方式,您可以获得表中所有行的名称。其中[column_name]表示包含数值1到12的整数列

2表示任何整数,通过联系字符串我创建了一个日期,我可以提取月份。'/1/2011'可以是任何日期

如果你想用变量

DECLARE @integer int;


SET @integer = 6;


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

这个对我很有用:

@MetricMonthNumber (some number)


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

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

使用这个语句

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

这将把月份数转换为月份完整字符串

SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)
to_char(to_date(V_MONTH_NUM,'MM'),'MONTH')

其中V_MONTH_NUM是月份号

SELECT to_char(to_date(V_MONTH_NUM,'MM'),'MONTH')  from dual;
Declare @MonthNumber int
SET @MonthNumber=DatePart(Month,GETDATE())
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )

解释:

  1. 第一个声明变量MonthNumber
  2. 获取DatePart的当前月份,返回月份号
  3. 第三次查询返回月份名称

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

SELECT DATENAME(month ,GETDATE())

以下是我的工作:

CAST(GETDATE() AS CHAR(3))
SELECT DATENAME(MONTH,dateadd(month, -3,getdate()))

用最好的方式

Select DateName( month , DateAdd( month , @MonthNumber , -1 ))
select monthname(curdate());

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

为我工作

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

当然可以

select datename(M,GETDATE())

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

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

使用下面的语句获取月份名称:

DECLARE @date datetime
SET @date='2015/1/4 00:00:00'


SELECT CAST(DATENAME(month,@date )  AS CHAR(3))AS 'Month Name'

这将为您提供简短的月份名称。像这样:一月,二月,三月等。

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

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

只要用今天的日期减去当前的月份,然后再加上你的月份。然后使用datename函数在一行中给出完整的名称。

print datename(month,dateadd(month,-month(getdate()) + 9,getdate()))
SELECT DateName(M, DateAdd(M, @MONTHNUMBER, -1))

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]

这很简单。

select DATENAME(month, getdate())

产出:1月

要将月号转换为月名,请尝试以下步骤

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

你可以得到这样的日期。 - 用户 table

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

您可以像这样获得monthname

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

输出

+-----------+-------------------------------+
| year(created_at) | monthname(created_at)  |
+-----------+-------------------------------+
|      2017        | september              |
|      2017        | june                   |

从SQL Server 2012开始,你可以使用FORMATDATEFROMPARTS来解决这个问题。(如果您想要来自其他区域性的月份名称,请更改:en-US)

select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')

如果你想要一个三个字母的月:

select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMM', 'en-US')

如果你真的想,你可以为它创建一个函数:

CREATE FUNCTION fn_month_num_to_name
(
@month_num tinyint
)
RETURNS varchar(20)
AS
BEGIN
RETURN FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')
END
您可以创建一个这样的函数来生成Month和do SELECT dbo.fn_GetMonthFromDate(date_column)作为月份FROM table_name

/****** Object:  UserDefinedFunction [dbo].[fn_GetMonthFromDate]    Script Date: 11/16/2018 10:26:33 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[fn_GetMonthFromDate]
(@date datetime)
RETURNS varchar(50)
AS
BEGIN
DECLARE @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

最简单的方法是调用函数MONTHNAME(your_date)your_date可以是一个静态值,也可以是一个表字段的值。

试试这个:SELECT MONTHNAME(concat('1970-',[Month int val],'-01'))

例如- SELECT MONTHNAME(concat('1970-',4,'-01'))

答案是——四月

如果有人想在MySQL中得到同样的东西。请查看以下查询。

 SELECT MONTH(STR_TO_DATE('November', '%M'))

这样我得到了所要求的结果。