Saya perlu menentukan jumlah hari dalam sebulan untuk tanggal tertentu di SQL Server.
Apakah ada fungsi bawaan? Jika tidak, apa yang harus saya gunakan sebagai fungsi yang ditentukan pengguna?
sql
sql-server
datetime
date
user-defined-functions
Bahkan Mien
sumber
sumber
case when datediff(m, dateadd(day, 1-day(@date), @date), convert(date, convert(datetime, 2958463))) > 0 then datediff(day, dateadd(day, 1-day(@date), @date), dateadd(month, 1, dateadd(day, 1-day(@date), @date))) else 31 end
day
komponeneomonth
output.Di SQL Server 2012 Anda dapat menggunakan EOMONTH (Transact-SQL) untuk mendapatkan hari terakhir setiap bulan dan kemudian Anda dapat menggunakan DAY (Transact-SQL) untuk mendapatkan jumlah hari dalam sebulan.
sumber
Solusi paling elegan: berfungsi untuk @DATE apa pun
Lemparkan ke dalam suatu fungsi atau gunakan saja sebaris. Ini menjawab pertanyaan asli tanpa semua sampah tambahan di jawaban lain.
contoh tanggal dari jawaban lain:
SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'1/31/2009'),0)))
Hasil 31SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2404-feb-15'),0)))
Hasil 29SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2011-12-22'),0)))
Hasil 31sumber
Jauh lebih sederhana ... coba
day(eomonth(@Date))
sumber
Secara pribadi, saya akan membuat UDF untuk itu jika tidak ada fungsi bawaan ...
sumber
Saya akan menyarankan:
sumber
Kode ini memberi Anda jumlah hari dalam bulan ini:
Ubah
getdate()
ke tanggal yang Anda perlukan untuk menghitung hari.sumber
sumber
Solusi 1: Temukan jumlah hari dalam bulan apa pun kami saat ini
Solusi 2: Temukan jumlah hari dalam kombo bulan-tahun tertentu
sumber
Anda memang perlu menambahkan fungsi, tapi itu sederhana. Saya menggunakan ini:
sumber
sumber
Nice Simple dan tidak memerlukan pembuatan fungsi apa pun. Bekerja dengan baik
sumber
Anda perlu membuat suatu fungsi, tetapi itu untuk kenyamanan Anda sendiri. Ini berfungsi dengan sempurna dan saya tidak pernah menemukan perhitungan yang salah menggunakan fungsi ini.
Cara kerjanya: mengurangkan nomor hari tanggal dari tanggal itu sendiri memberi Anda hari terakhir bulan sebelumnya. Jadi, Anda perlu menambahkan satu bulan ke tanggal yang ditentukan, kurangi nomor hari dan dapatkan komponen hari dari hasilnya.
sumber
sumber
Saya menaikkan suara Mehrdad, tetapi ini juga berfungsi. :)
Untuk menguji
sumber
ini satu lagi ...
sumber
Saya tahu pertanyaan ini sudah kuno tetapi saya pikir saya akan membagikan apa yang saya gunakan.
dan
Itu bisa digabungkan untuk membuat satu fungsi untuk mengambil jumlah hari dalam sebulan jika diperlukan.
sumber
Nice 'n' Simple dan tidak perlu membuat fungsi apa pun
sumber
subdate
fungsi.Mehrdad Afshari adalah jawaban yang paling akurat, selain biasanya jawaban ini didasarkan pada pendekatan matematika formal yang diberikan oleh Curtis McEnroe di blognya https://cmcenroe.me/2014/12/05/days-in-month-formula.html
sumber
Untuk mendapatkan no. hari dalam sebulan kita bisa langsung menggunakan Day () tersedia dalam SQL.
Ikuti tautan yang diposting di akhir jawaban saya untuk SQL Server 2005/2008.
Contoh berikut dan hasilnya adalah dari SQL 2012
Menghasilkan SQL Server SSMS
Proses:
Ketika EOMONTH digunakan, apapun format tanggal yang kita gunakan diubah menjadi format DateTime dari SQL-server. Kemudian keluaran tanggal EOMONTH () adalah 2016-12-31 dengan 2016 sebagai Tahun, 12 sebagai Bulan dan 31 sebagai Hari. Output ini ketika diteruskan ke Day () ini memberi Anda jumlah hari total dalam sebulan.
Jika kita ingin mendapatkan hasil instan untuk pengecekan kita bisa langsung menjalankan kode di bawah ini,
atau
untuk referensi untuk bekerja di SQL Server 2005/2008/2012, ikuti tautan eksternal berikut ...
Temukan Jumlah Hari dalam Satu Bulan di SQL
sumber
Hasil: Bulan Ini 31
Bulan Depan 30
sumber
sumber
sumber
Untuk kencan apapun
sumber
sumber
kueri sederhana di SQLServer2012:
pilih hari (('20-05-1951 22:00:00'))
saya menguji untuk banyak tanggal dan selalu mengembalikan hasil yang benar
sumber
pilih first_day = dateadd (hh, -1 * datepart (dd, getdate ()) + 1, getdate ()), last_day = dateadd (hh, -1 * datepart (dd, dateadd (mm, 1, getdate ())) , dateadd (mm, 1, getdate ())), no_of_days = 1 + dateiff (dd, dateadd (dd, -1 * datepart (dd, getdate ()) + 1, getdate ()), dateadd (dd, -1 * datepart (dd, dateadd (mm, 1, getdate ())), dateadd (mm, 1, getdate ())))
ganti tanggal apapun dengan getdate untuk mendapatkan jumlah bulan pada tanggal tersebut
sumber
sumber