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

Gar*_*ett 20 sql-server

在T-SQL中,将月份名称转换为数字的最佳方法是什么?

例如:

'January' -> 1
'February' -> 2
'March' -> 3
Run Code Online (Sandbox Code Playgroud)

等等.

有没有内置的功能可以做到这一点?

Ric*_*Ric 30

这个怎么样?

select DATEPART(MM,'january 01 2011') -- returns 1
select DATEPART(MM,'march 01 2011')  -- returns 3
select DATEPART(MM,'august 01 2011') -- returns 8
Run Code Online (Sandbox Code Playgroud)


小智 14

这个怎么样:

SELECT MONTH('March' + ' 1 2014') 
Run Code Online (Sandbox Code Playgroud)

会回来3.

  • 我在 670,000 行上测试了 DATEPART 和 MONTH 的类似性能。 (2认同)

小智 7

SELECT DATEPART(MM,'january '+'01 1900')
SELECT MONTH('january ' + '01 1900')
SELECT month(dateadd(month,DATEDIFF(month,0,'january 01 2015'),0))
Run Code Online (Sandbox Code Playgroud)


小智 5

它的退出很简单,取月份名称的前 3 位数字并使用此公式。

Select charindex('DEC','JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC')/4+1
Run Code Online (Sandbox Code Playgroud)