DATE SQL'den yalnızca Ay ve Yıl alınıyor


Yanıtlar:


170

Zaten verilen önerilerin yanı sıra, sorunuzdan çıkarabileceğim başka bir olasılık daha var:
- Sonucun hala bir tarih
olmasını istiyorsunuz - Ama Günleri, Saatleri vb. 'Atmak' istiyorsunuz
- Bir yıl / aydan ayrılmak sadece tarih alanı

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

Bu, bir temel tarihten (0) itibaren tam ayların sayısını alır ve ardından bunları bu temel tarihe ekler. Böylece tarihin bulunduğu aya aşağı yuvarlanır.

NOT: SQL Server 2008'de, TIME hala 00: 00: 00.000 olarak eklenecektir. Bu, herhangi bir gün ve saat gösterimini "kaldırmak" ile tam olarak aynı değildir. Ayrıca GÜN birinci olarak ayarlandı. örneğin 2009-10-01 00: 00: 00.000


1
Bu benim için hiç işe yaramadı. Sonuç olarak bana 2023-02-01 00: 00: 00.000 veriyor.
Dss

1
@dss - hangi parametrelerle? Gerçek SQL'i gösterin ve bir baktığım için mutluyum.
MatBailie

@MatBailie SELECT DATEADD (MONTH, DATEDIFF (MONTH, 0, LastSaleDate), 0) AS [year_month_date_field] FROM db1.products, burada productID = 123 "LastSaleDate" sütunu "(tarihsaat, boş değil)" olarak bildirildi ve şunu anlıyorum: 2014/09/01 00: 00: 00.000
DSS

1
@DSS - Evet, bu doğru görünüyor. Eylül 2014'ün en başına yuvarlanıyor. "Yalnızca Yıl ve Ay" veri türü olmadığından, her ayın ilk anını kullanmak standart uygulamadır. Bu DATETIME değerini bir dizeye dönüştürürken (Aaplication Layer, Presentation Layer, Reporting Layer, vb.), Her zaman sadece yıl ve ay bölümleriyle biçimlendirmeyi seçebilirsiniz. Ancak "veri tabanında" veri işleme açısından bu doğrudur.
MatBailie

Sanırım cevabınızın bir "Tarih" alanıyla kullanılması amaçlandığı için, ancak "tarih saat" alanı kullanıyorum, bu yüzden büyük olasılıkla sorun budur.
Dss

133
select month(dateField), year(dateField)

2
harika! Bunları bir sütuna bağlayabilirsiniz: 'cast (month (dateField) olarak varchar olarak) +' seçin. ' + 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) 'MM' döndürmüyor. Ay 1-9 arasındaysa sadece tek rakam döndürür.
Jaikrat

"MM" yerine "ay"
demelidir

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

çıktı şöyle görünecek: "Aralık 2013"


15

Bunu yapmak için iki SQL işlevi vardır:

Ayrıntılar için bağlantılı belgelere bakın.


5
En azından bazı kısa örnekler vermeyi öneririm çünkü bağlantılar her zaman sonsuza kadar kalmaz ... Aslında artık iyi değiller.
Carol

12

Bu da yardımcı olabilir.

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

veya

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

veya

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

Neyse, iade alanındaki "0" kaldırılmasın mı?
Si8

11

let's write it this way: YEAR(anySqlDate) and MONTH(anySqlDate). Try it with YEAR(GETDATE()) for example.


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

I am interpreting your question in two ways.

a) You only need Month & Year seperately in which case here is the answer

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

b)

You want to display from a given date say '2009-11-24 09:01:55.483' in MONTH.YEAR format. So the output should come as 11.2009 in this case.

If that is supposed to be the case then try this(among other alternatives)

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

5

Some of the databases such as MS ACCESS or RODBC may not support the SQL SERVER functions, but for any database that has the FORMAT function you can simply do this:

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


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

gives you eg 201601 if you want a six digit result


2

Try this

select to_char(DATEFIELD,'MON') from YOUR_TABLE

eg.

select to_char(sysdate, 'MON') from dual

2

Try this:

Portuguese

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

Result: maio 2019


English

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

Result: May 2019

If you want in another language, change 'pt-pt' or 'en-US' to any of these in link


1

I had a specific requirement to do something similar where it would show month-year which can be done by the following:

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

In my particular case, I needed to have it down to the 3 letter month abreviation with a 2 digit year, looking something like this: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'


1

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


0

My database doesn't support most of the functions above however I found that this works:

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

for example: SELECT SUBSTR(created, 1,7) FROM table;

returns the year and month in the format "yyyy-mm"


0

Get Month & Year From 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), ' ', '-')

Output: Mar-2019


0

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

Output :- January-2019

general datefield we can use

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

0

For result: "YYYY-MM"

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

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

got me my desired result of date formatted as 07 Mar 2018

My column 'transfer_date' is a datetime type column and I am using SQL Server 2017 on azure


0

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

Output: 5.2020

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

Output: May.2020

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.