2008-10-09 160 views

Respuesta

131

Un poco hacky pero debería funcionar:

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

Por qué el '-1'? ¿Es necesario porque los meses en SQL Server están compensados ​​por uno? – DoomerDGR8

+1

@ DoomerDGR8 en realidad se debe a que la fecha que se usa para iniciar la función de fecha y hora comienza en 1. si necesitamos el nombre de fecha de enero, estaríamos agregando 1 mes a 2008-01-01, lo que nos daría el 2008-02-01, que es febrero. así que restamos 1 para dar cuenta de esto, y obtenemos enero nuevamente. – DForck42

+0

Para solucionar el problema de restar 1 de su fecha y hora, utilice una fecha y hora en diciembre en lugar de enero. Por ejemplo SELECT DATENAME (month, DATEADD (month, @mydate, CAST ('1978-12-01' AS datetime))) –

4

En algunas localidades, como el hebreo, hay leap months depende del año, por lo que deben evitarse errores en dichos lugares que podría considerar la siguiente solución:

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

¿Existe una función para convertir una fecha a una fecha judía en SQL? No es que yo sepa de ... –

210

Creo que esta es la mejor manera de obtener el mes nombre cuando tiene el número de mes

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

[EDIT]

Como dijo Asif a continuación, otra forma de hacer esto sería

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

por motivos de legibilidad, realmente lo escribiría así: Seleccione FechaNombre (mes, FechaAdd (mes, @MonthNumber - 1, '1900-01-01')) –

+8

una posible solución alternativa Seleccione FechaNombre (month, DateAdd (month, @MonthNumber, -1)) – Asif

+2

Eso es perfecto. Esta debería ser la respuesta. – gotqn

3

Se puede utilizar el incorporado CONVERT función

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

Esta voluntad mostrar los primeros 3 caracteres del mes (ENE, FEB, etc.)

78
SELECT DATENAME(month, GETDATE()) AS 'Month Name' 
+0

Es obtener el nombre del mes por fecha, no el número del mes, como lo solicitó SO. – Imad

3

Puede utilizar el functin convertido de la siguiente manera

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

además de originales

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

puede hacerlo

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

de esta manera usted obtiene nombres para todas las filas en una tabla. donde [column_name] representa una columna entera que contiene el valor numérico del 1 al 12

2 representa cualquier número entero, por cadena de contacto creé una fecha en la que puedo extraer el mes. '/ 1/2011' puede ser cualquier fecha

si usted quiere hacer esto con la variable

DECLARE @integer int; 

SET @integer = 6; 

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

Ésta funcionó para mí:

@MetricMonthNumber (some number) 

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

Desde un post anterior de @leoinfo y @Valentino Vranken. Acabo de hacer una selección rápida y funciona.

-2

Utilice esta declaración

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

Esto convertirá el número de mes a mes cadena completa

+4

TO_CHAR() es una función de Oracle. El OP está utilizando SQL Server, que tiene la función CONVERT diferente pero equivalente. – APC

58
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3) 
+6

¡Me gusta esta manera alternativa de pensar en el jardín izquierdo! Alimento para el pensamiento –

+1

¡Y es determinista! Se puede usar como columna calculada también, ¡gracias! –

+0

nice ... estaba buscando un código simple para obtener meses desde enero a [#] y esto funcionó muy bien. para mostrar varios meses, simplemente cambie a algo como esto >> SUBSTRING ('ENE FEB MAR ABR MAY JUN JUL AUG SEP OCT NOV DEC', 0, (@intMonth * 4)) –

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

donde V_MONTH_NUM es el número del mes

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

Parece que se está refiriendo a Oracle. La publicación está etiquetada con SQL 2005. – Philter

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

Explicación:

  1. Primera decalre variable MonthNumber
  2. Obtener Mes actual de DatePart cuales vuelta Número Mes
  3. tercer mes Volver Nombre de la consulta
2

creo que esto es suficiente para obtener el nombre del mes cuando tienes una cita

SELECT DATENAME(month ,GETDATE()) 
+5

Ya existe otra respuesta exacta – Yaroslav

6

Los siguientes obras para mí:

CAST (GETDATE() como CHAR (3))

+0

respuesta perfecta gracias. –

1

SELECT DATENAME (MES, dateadd (mes, -3, getdate ()))

28

utilizar la mejor manera

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

O

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

Trabajando para mí

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

este que va a trabajar --select datename (M, GETDATE())

4

Utilice esta declaración para convertir Valor numérico del mes al nombre del mes.

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

A menos que me equivoque, no se usa un número entero, como pidió el OP. – influent

0

Utilice esta declaración para obtener el nombre del mes:

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

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

esto le dará nombre corto mes. De esta manera: enero, febrero, marzo, etc.

0

Aquí está mi solución usando información de otros para resolver un problema.

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

Simplemente reste el mes actual de la fecha de hoy, luego agregue nuevamente su número de mes. Luego use la función de nombre de fecha para dar el nombre completo todo en 1 línea.

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

No hay un sistema definido en función de servidor SQL. Pero puede crear su propia función definida por el usuario: una función escalar. Encontrará funciones escalares en el Explorador de objetos para su base de datos: Programabilidad-> Funciones-> Funciones con valores escalares. A continuación, uso una variable de tabla para unir todo.

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

Es muy simple.

select DATENAME(month, getdate()) 

de salida: Enero

+2

Esto solo funciona si tiene un valor de fecha completo, no un número entero de mes. – gunr2171

2

Convertir número de meses a nombre del mes, tratar el siguiente

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

se puede obtener la fecha como esta. por ejemplo: - Los usuarios mesa

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

se puede obtener el monthname como esta salida

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

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

y ¿dónde está la función monthname ??? – ger

Cuestiones relacionadas