Obtenir uniquement le mois et l'année à partir du DATE SQL


133

Je dois accéder uniquement au champ Month.Year à partir de la date dans SQL Server.

Réponses:


170

En plus des suggestions déjà données, il y a une autre possibilité que je peux déduire de votre question:
- Vous voulez toujours que le résultat soit une date
- Mais vous voulez `` écarter '' les jours, les heures, etc.
- Laisser un an / mois seul champ de date

SELECT
   DATEADD(MONTH, DATEDIFF(MONTH, 0, <dateField>), 0) AS [year_month_date_field]
FROM
   <your_table>

Cela obtient le nombre de mois entiers à partir d'une date de base (0), puis les ajoute à cette date de base. Arrondissant ainsi au mois dans lequel la date se situe.

REMARQUE: dans SQL Server 2008, vous aurez toujours l'HEURE attachée en tant que 00: 00: 00.000. Ce n'est pas exactement la même chose que "supprimer" toute notation de jour et d'heure complètement. Le jour est également réglé sur le premier. par exemple 2009-10-01 00: 00: 00.000


1
Cela n'a pas du tout fonctionné pour moi. Cela me donne 2023-02-01 00: 00: 00.000 comme résultat.
Dss

1
@dss - avec quels paramètres? Montrez le SQL réel et je suis heureux de jeter un coup d'œil.
MatBailie

@MatBailie SELECT DATEADD (MONTH, DATEDIFF (MONTH, 0, LastSaleDate), 0) AS [year_month_date_field] FROM db1.products où productID = 123 La colonne "LastSaleDate" est déclarée comme "(datetime, not null)" et j'obtiens: 01/09/2014 00: 00: 00.000
Dss

1
@DSS - Oui, cela semble correct. Il est arrondi au tout début de septembre 2014. Il n'y a pas de type de données «Année et mois uniquement», donc utiliser le premier moment de chaque mois est la pratique courante. Lors de la conversion de cette valeur DATETIME en chaîne (couche d'aplication, couche de présentation, couche de rapport, etc.), vous pouvez toujours choisir de la formater avec uniquement les parties année et mois. Mais en termes de manipulation des données «dans la base de données», c'est correct.
MatBailie

Je pense que peut-être parce que votre réponse était destinée à être utilisée avec un champ "Date" mais j'utilise un champ "datetime" donc c'est probablement le problème.
Dss

133
select month(dateField), year(dateField)

2
génial! Vous pouvez les connecter à une colonne: 'select cast (month (dateField) as varchar) +'. ' + cast (year (dateField) as varchar) '
izik f


32
SELECT DATEPART(yy, DateVal)
SELECT DATEPART(MM, DateVal)
SELECT DATENAME(MM, DateVal)

2
SELECT DATEPART (MM, DateVal) ne renvoie pas «MM». Il ne fait que renvoyer un seul chiffre si le mois est compris entre 1 et 9.
Jaikrat

Au lieu de "MM", il devrait indiquer "month": 'SELECT DATEPART (month, getdate ())'
Renne007

17
datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear

la sortie ressemblera à: «Décembre 2013»


15

Il existe deux fonctions SQL pour le faire:

Reportez-vous à la documentation liée pour plus de détails.


5
Je suggérerais de mettre au moins quelques brefs exemples car les liens ne restent pas toujours éternels ... En fait, ils ne sont plus bons.
Carol

12

Cela peut également être utile.

SELECT YEAR(0), MONTH(0), DAY(0);

ou

SELECT YEAR(getdate()), MONTH(getdate()), DAY(getdate());

ou

SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField);

Quoi qu'il en soit pour ne pas supprimer le "0" dans le champ de retour?
Si8

11

écrivons-le de cette façon: YEAR(anySqlDate)et MONTH(anySqlDate). Essayez-le avec YEAR(GETDATE())par exemple.


10
convert(varchar(7), <date_field>, 120)
because 120 results in 'yyyy-MM-dd' which is varchar(10)
using varchar(7) will display only year and month

example:
select convert(varchar(7), <date_field>, 120), COUNT(*)
from <some_table>
group by convert(varchar(7), <date_field>, 120)
order by 1

6

J'interprète votre question de deux manières.

a) Vous n'avez besoin que du mois et de l'année séparément, auquel cas voici la réponse

select 
        [YEAR] = YEAR(getdate())
        ,[YEAR] = DATEPART(YY,getdate())
        , [MONTH] = month(getdate())
        ,[MONTH] = DATEPART(mm,getdate())
        ,[MONTH NAME] = DATENAME(mm, getdate()) 

b)

Vous souhaitez afficher à partir d'une date donnée, par exemple '2009-11-24 09:01:55.483'au format MONTH.YEAR . Donc, la sortie devrait être11.2009 dans ce cas.

Si c'est censé être le cas, essayez ceci (parmi d'autres alternatives)

select [Month.Year] = STUFF(CONVERT(varchar(10), GETDATE(),104),1,3,'')

5

Certaines des bases de données telles que MS ACCESSou RODBCpeuvent ne pas prendre en charge les SQL SERVERfonctions, mais pour toute base de données qui a la FORMATfonction, vous pouvez simplement faire ceci:

SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>


3
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

vous donne par exemple 201601 si vous voulez un résultat à six chiffres


2

Essaye ça

select to_char(DATEFIELD,'MON') from YOUR_TABLE

par exemple.

select to_char(sysdate, 'MON') from dual

2

Essaye ça:

Portugais

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'pt-pt') + ' ' + convert(varchar(10),year(getdate()),100)

Résultat: maio 2019


Anglais

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'en-US') + ' ' + convert(varchar(10),year(getdate()),100)

Résultat: mai 2019

Si vous voulez dans une autre langue, remplacez " pt-pt " ou " en-US " par l'un de ces éléments dans le lien


1

J'avais une exigence spécifique pour faire quelque chose de similaire où il afficherait mois-année, ce qui peut être fait de la manière suivante:

SELECT DATENAME(month, GETDATE()) + '-' + CAST(YEAR(GETDATE()) AS nvarchar) AS 'Month-Year'

Dans mon cas particulier, je devais l'avoir à l'abréviation de mois de 3 lettres avec une année à 2 chiffres, ressemblant à ceci: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'


1

Essayer SELECT CONCAT(month(datefield), '.', year(datefield)) FROM YOURTABLE;


0

Ma base de données ne prend pas en charge la plupart des fonctions ci-dessus, mais j'ai trouvé que cela fonctionne:

SELECT * FROM table WHERE SUBSTR(datetime_column, starting_position, number_of_strings)=required_year_and_month;

par exemple: SELECT SUBSTR(created, 1,7) FROM table;

renvoie l'année et le mois au format "aaaa-mm"


0

Obtenir le mois et l'année à partir de la date

DECLARE @lcMonth nvarchar(10)
DECLARE @lcYear nvarchar(10)

SET @lcYear=(SELECT  DATEPART(YEAR,@Date))
SET @lcMonth=(SELECT  DATEPART(MONTH,@Date))

0
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')

Sortie: Mar-2019


0

Requete :- Select datename(m,GETDATE())+'-'+cast(datepart(yyyy,GETDATE()) as varchar) as FieldName

Sortie: - Janvier-2019

champ de date général que nous pouvons utiliser

datename(m,<DateField>)+' '+cast(datepart(yyyy,<DateField>) as varchar) as FieldName

0

Pour le résultat: "AAAA-MM"

SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)

0
select convert(varchar(11), transfer_date, 106) 

m'a obtenu le résultat souhaité de la date au format 07 mars 2018

Ma colonne 'transfer_date' est une colonne de type datetime et j'utilise SQL Server 2017 sur Azure


0

sélectionnez CONCAT (MONTH (GETDATE ()), '.', YEAR (GETDATE ()))

Sortie: 5.2020

sélectionnez CONCAT (DATENAME (MONTH, GETDATE ()), '.', YEAR (GETDATE ()))

Sortie: mai 2020

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.