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.

user160820
la source

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

MatBailie
la source
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)
Lucas Ayala
la source
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)
Adriaan Stander
la source
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»

Valya Sylevych
la source
15

Il existe deux fonctions SQL pour le faire:

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

Grzegorz Gierlik
la source
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);
Sans nom
la source
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.

Philippe Grondier
la source
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
razvangry
la source
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,'')
priyanka.sarkar
la source
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>
Ibo
la source
4
RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 
Valya Sylevych
la source
3
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

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

Mike
la source
2

Essaye ça

select to_char(DATEFIELD,'MON') from YOUR_TABLE

par exemple.

select to_char(sysdate, 'MON') from dual
Amin
la source
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

Pedro
la source
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'

N. Haut
la source
1

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

Sandwich
la source
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"

mobfire
la source
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))
JIYAUL MUSTAPHA
la source
0
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')

Sortie: Mar-2019

Amit Jaiswal
la source
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
Deepak Tambe
la source
0

Pour le résultat: "AAAA-MM"

SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)
Jelena Lazarevic
la source
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

Hasan Junaid Hashmi
la source
0

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

Sortie: 5.2020

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

Sortie: mai 2020

Dinesh Gaud
la source