Ottenere solo mese e anno da SQL DATE


Risposte:


170

Oltre ai suggerimenti già forniti, c'è un'altra possibilità che posso dedurre dalla tua domanda:
- Vuoi ancora che il risultato sia una data
- Ma vuoi 'scartare' i Giorni, le Ore, ecc.
- Lasciando un anno / mese solo campo data

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

Ciò ottiene il numero di mesi interi da una data di base (0) e quindi li aggiunge a quella data di base. Arrotondando così al mese in cui si trova la data.

NOTA: in SQL Server 2008, avrai ancora TIME associato come 00: 00: 00.000 Questo non equivale esattamente a "rimuovere" qualsiasi notazione di giorno e ora del tutto. Anche il GIORNO è impostato sul primo. ad es. 2009-10-01 00: 00: 00.000


1
Questo non ha funzionato affatto per me. Mi dà 2023-02-01 00: 00: 00.000 come risultato.
Dss,

1
@dss - con quali parametri? Mostra l'SQL reale e sono felice di dare un'occhiata.
MatBailie,

@MatBailie SELECT DATEADD (MONTH, DATEDIFF (MONTH, 0, LastSaleDate), 0) AS [year_month_date_field] FROM db1.products dove productID = 123 La colonna "LastSaleDate" viene dichiarata come "(datetime, non null)" e ottengo: 01/09/2014 00: 00: 00.000
Dss

1
@DSS - Sì, sembra corretto. Arrotondando all'inizio di settembre 2014. Non esiste un tipo di dati "Solo per anno e mese", quindi l'utilizzo del primo momento di ogni mese è la pratica standard. Quando si converte questo valore DATETIME in una stringa (livello di aplicazione, livello di presentazione, livello di reporting, ecc.), È sempre possibile scegliere di formattarlo solo con le parti di anno e mese. Ma in termini di manipolazione dei dati "nel database" questo è corretto.
MatBailie,

Penso che forse perché la tua risposta doveva essere utilizzata con un campo "Data" ma sto usando un campo "datetime", quindi questo è probabilmente il problema.
Dss,

133
select month(dateField), year(dateField)

2
grande! Puoi collegarli a una colonna: 'seleziona cast (mese (dateField) come 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) non restituisce 'MM'. Sta solo tornando una singola cifra se il mese è tra 1-9.
Jaikrat,

Invece di "MM" dovrebbe essere indicato "mese": "SELEZIONA DATEPART (mese, getdate ())"
Renne007,

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

l'output sarà simile a "dicembre 2013"


15

Esistono due funzioni SQL per farlo:

Fare riferimento alla documentazione collegata per i dettagli.


5
Suggerirei di fare almeno alcuni brevi esempi perché i collegamenti non restano sempre per sempre ... In realtà non sono più validi.
Carol,

12

Anche questo può essere utile.

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

o

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

o

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

In ogni caso non rimuovere lo "0" nel campo di ritorno?
Si8,

11

scriviamo in questo modo: YEAR(anySqlDate)e MONTH(anySqlDate). Provalo con YEAR(GETDATE())ad esempio.


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

Sto interpretando la tua domanda in due modi.

a) Hai solo bisogno di mese e anno separatamente, nel qual caso ecco la risposta

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

b)

Si desidera visualizzare da una determinata data dire '2009-11-24 09:01:55.483'in formato MONTH.YEAR . Quindi l'output dovrebbe arrivare come 11.2009in questo caso.

Se questo dovrebbe essere il caso, prova questo (tra le altre alternative)

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

5

Alcuni database come MS ACCESSo RODBCpotrebbero non supportare le SQL SERVERfunzioni, ma per qualsiasi database che ha la FORMATfunzione puoi semplicemente farlo:

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


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

ti dà ad esempio 201601 se vuoi un risultato di sei cifre


2

Prova questo

select to_char(DATEFIELD,'MON') from YOUR_TABLE

per esempio.

select to_char(sysdate, 'MON') from dual

2

Prova questo:

portoghese

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

Risultato: maio 2019


Inglese

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

Risultato: maggio 2019

Se vuoi in un'altra lingua, cambia ' pt-pt ' o ' en-US ' in uno di questi nel link


1

Avevo l'obbligo specifico di fare qualcosa di simile in cui avrebbe mostrato mese-anno che può essere fatto come segue:

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

Nel mio caso particolare, avevo bisogno di averlo fino all'abbreviazione del mese di 3 lettere con un anno a 2 cifre, simile a questo: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'


1

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


0

Il mio database non supporta la maggior parte delle funzioni sopra, tuttavia ho scoperto che funziona:

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

per esempio: SELECT SUBSTR(created, 1,7) FROM table;

restituisce l'anno e il mese nel formato "aaaa-mm"


0

Ottieni mese e anno dalla data

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), ' ', '-')

Uscita: Mar-2019


0

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

Uscita: - gennaio-2019

datario generale che possiamo usare

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

0

Per il risultato: "AAAA-MM"

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

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

mi ha dato il risultato desiderato della data formattata come 07 mar 2018

La mia colonna 'transfer_date' è una colonna di tipo datetime e sto usando SQL Server 2017 su azzurro


0

seleziona CONCAT (MONTH (GETDATE ()), '.', YEAR (GETDATE ()))

Uscita: 5.2020

seleziona CONCAT (DATENAME (MONTH, GETDATE ()), '.', YEAR (GETDATE ()))

Uscita: maggio 2020

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.