Hanya Mendapatkan Bulan dan Tahun dari SQL DATE


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


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)

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)

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'


15

Ada dua fungsi SQL untuk melakukannya:

Lihat dokumentasi tertaut untuk detailnya.


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);

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.


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

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

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>


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

memberi Anda misalnya 201601 jika Anda ingin hasil enam digit


2

Coba ini

select to_char(DATEFIELD,'MON') from YOUR_TABLE

misalnya.

select to_char(sysdate, 'MON') from dual

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


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'


1

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


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"


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

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

Output: Mar-2019


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

0

Untuk hasil: "YYYY-MM"

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

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


0

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

Output: 5.2020

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

Output: Mei.2020

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.