Hanya Mendapatkan Bulan dan Tahun dari SQL DATE

133

Saya hanya perlu mengakses Bulan. Tahun dari bidang Tanggal di SQL Server.

pengguna160820
sumber

Jawaban:

170

Serta saran yang sudah diberikan, ada satu kemungkinan lain yang dapat saya simpulkan dari pertanyaan Anda:
- Anda masih ingin hasilnya menjadi kencan
- Tetapi Anda ingin 'membuang' Hari, Jam, dll.
- Meninggalkan satu tahun / bulan hanya bidang tanggal

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

Ini mendapatkan jumlah bulan penuh dari tanggal dasar (0) dan kemudian menambahkannya ke tanggal dasar itu. Jadi pembulatan ke bulan di mana tanggal tersebut masuk

CATATAN: Dalam SQL Server 2008, Anda masih akan memiliki TIME terlampir sebagai 00: 00: 00.000 Ini tidak persis sama dengan "menghapus" notasi hari dan waktu sama sekali. Juga HARI diatur ke yang pertama. mis. 2009-10-01 00: 00: 00.000

MatBailie
sumber
1
Ini tidak berhasil sama sekali bagi saya. Hasilnya memberi saya 2023-02-01 00: 00: 00.000 sebagai hasilnya.
DSS
1
@dss - dengan parameter apa? Tampilkan SQL yang sebenarnya dan saya senang melihatnya.
MatBailie
@MatBailie SELECT DATEADD (BULAN, DATEIFF (BULAN, 0, LastSaleDate), 0) SEBAGAI [year_month_date_field] DARI db1.products di mana productID = 123 Kolom "LastSaleDate" dinyatakan sebagai "(datetime, bukan null)" dan saya mendapatkan: 2014-09-01 00: 00: 00.000
Dss
1
@DSS - Ya, itu tampaknya benar. Ini membulatkan ke awal September 2014. Tidak ada tipe data "Tahun dan Bulan saja", jadi menggunakan momen pertama setiap bulan adalah praktik standar. Saat mengonversi nilai DATETIME ini menjadi string (Aaplication Layer, Presentation Layer, Reporting Layer, dll), Anda selalu dapat memilih untuk memformatnya hanya dengan bagian tahun dan bulan. Tetapi dalam hal manipulasi data "dalam database" ini benar.
MatBailie
Saya pikir mungkin karena jawaban Anda dimaksudkan untuk digunakan dengan bidang "Tanggal" tapi saya menggunakan bidang "waktu" sehingga mungkin masalahnya.
DSS
133
select month(dateField), year(dateField)
Lucas Ayala
sumber
2
Bagus! Anda dapat menghubungkan mereka ke satu kolom: 'pilih pemain (bulan (dateField) sebagai varchar) +'. ' + cast (tahun (dateField) sebagai varchar) '
izik f
32
SELECT DATEPART(yy, DateVal)
SELECT DATEPART(MM, DateVal)
SELECT DATENAME(MM, DateVal)
Adriaan Stander
sumber
2
SELECT DATEPART (MM, DateVal) tidak mengembalikan 'MM'. Hanya mengembalikan satu digit jika bulan antara 1-9.
Jaikrat
Alih-alih "MM" itu seharusnya mengatakan "bulan": 'SELECT DATEPART (bulan, getdate ())'
Renne007
17
datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear

hasilnya akan seperti: 'Desember 2013'

Valya Sylevych
sumber
15

Ada dua fungsi SQL untuk melakukannya:

Lihat dokumentasi tertaut untuk detailnya.

Grzegorz Gierlik
sumber
5
Saya sarankan untuk memberikan setidaknya beberapa contoh singkat karena tautan tidak selalu tetap selamanya ... Bahkan mereka tidak lagi bagus.
Carol
12

Ini bisa membantu juga.

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

atau

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

atau

SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField);
Tanpa nama
sumber
Lagi pula untuk tidak menghapus "0" di bidang kembali?
Si8
11

mari kita tulis seperti ini: YEAR(anySqlDate)dan MONTH(anySqlDate). Cobalah dengan YEAR(GETDATE())misalnya.

Philippe Grondier
sumber
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
sumber
6

Saya menafsirkan pertanyaan Anda dengan dua cara.

a) Anda hanya perlu Bulan & Tahun secara terpisah dalam hal ini jawabannya

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

b)

Anda ingin menampilkan dari tanggal tertentu katakan '2009-11-24 09:01:55.483'dalam format MONTH.YEAR . Jadi hasilnya harus seperti 11.2009pada kasus ini.

Jika memang seharusnya demikian maka coba ini (di antara alternatif lain)

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

Beberapa basis data seperti MS ACCESSatau RODBCmungkin tidak mendukung SQL SERVERfungsi, tetapi untuk basis data apa pun yang memiliki FORMATfungsi, Anda dapat melakukan ini:

SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>
Ibo
sumber
4
RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 
Valya Sylevych
sumber
3
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

memberi Anda misalnya 201601 jika Anda ingin hasil enam digit

Mike
sumber
2

Coba ini

select to_char(DATEFIELD,'MON') from YOUR_TABLE

misalnya.

select to_char(sysdate, 'MON') from dual
Amin
sumber
2

Coba ini:

Portugis

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

Hasil: maio 2019


Inggris

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

Hasil: Mei 2019

Jika Anda ingin menggunakan bahasa lain, ubah ' pt-pt ' atau ' en-US ' ke salah satu tautan ini

Pedro
sumber
1

Saya memiliki persyaratan khusus untuk melakukan sesuatu yang serupa di mana itu akan menunjukkan bulan-tahun yang dapat dilakukan dengan yang berikut:

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

Dalam kasus khusus saya, saya perlu menurunkannya menjadi 3 bulan bulan dengan tahun 2 digit, terlihat seperti ini: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'

N. Haut
sumber
1

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

Sandwich
sumber
0

Basis data saya tidak mendukung sebagian besar fungsi di atas namun saya menemukan bahwa ini berfungsi:

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

sebagai contoh: SELECT SUBSTR(created, 1,7) FROM table;

mengembalikan tahun dan bulan dalam format "yyyy-mm"

mobfire
sumber
0

Dapatkan Bulan & Tahun Dari Tanggal

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

SET @lcYear=(SELECT  DATEPART(YEAR,@Date))
SET @lcMonth=(SELECT  DATEPART(MONTH,@Date))
JIYAUL MUSTAPHA
sumber
0
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')

Output: Mar-2019

Amit Jaiswal
sumber
0

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

Output: - Januari-2019

field tanggal umum dapat kita gunakan

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

Untuk hasil: "YYYY-MM"

SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)
Jelena Lazarevic
sumber
0
select convert(varchar(11), transfer_date, 106) 

membuat saya hasil yang diinginkan tanggal diformat sebagai 07 Mar 2018

Kolom saya 'transfer_date' adalah kolom tipe datetime dan saya menggunakan SQL Server 2017 di biru

Hasan Junaid Hashmi
sumber
0

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

Output: 5.2020

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

Output: Mei.2020

Dinesh Gaud
sumber