Jika saya memiliki tanggal 01/01/2009, saya ingin mencari tahu hari apa itu misalnya Senin, Selasa, dll ...
Apakah ada fungsi bawaan untuk ini di SQL Server 2005/2008? Atau apakah saya perlu menggunakan tabel bantu?
sql
sql-server
datetime
seekor kuda tanpa nama
sumber
sumber
Jawaban:
Gunakan
DATENAME
atauDATEPART
:sumber
Meskipun jawaban SQLMenace telah diterima, ada satu
SET
opsi penting yang harus Anda ketahuiDATENAME akan mengembalikan nama tanggal yang benar tetapi tidak dengan nilai DATEPART yang sama jika hari pertama dalam seminggu telah diubah sebagaimana diilustrasikan di bawah ini.
sumber
( @@datefirst - 1 + datepart(weekday, thedate) ) % 7
. Hari Minggu akan selalu nol.DayOfWeek
pencacahan memilikiDayOfWeek.Sunday
dengan nilai ...0
. Jadi, tidak peduli apaDateFirst
setted untuk, sebuah diobati SQL-kembaliWEEKDAY
nilai tidak akan pernah kompatibel dengan NET rekan. Yay, Microsoft.sumber
select datename(dw,getdate())
Untuk mendapatkan nilai deterministik untuk hari dalam seminggu untuk tanggal tertentu, Anda dapat menggunakan kombinasi DATEPART () dan @@ datefirst . Kalau tidak, Anda tergantung pada pengaturan di server.
Lihatlah situs berikut untuk solusi yang lebih baik: MS SQL: Day of Week
Hari dalam seminggu akan berada dalam kisaran 0 hingga 6, di mana 0 adalah hari Minggu, 1 adalah hari Senin, dll. Kemudian Anda dapat menggunakan pernyataan kasus sederhana untuk mengembalikan nama hari kerja yang benar.
sumber
EROPA:
sumber
Dengan SQL Server 2012 dan seterusnya Anda dapat menggunakan
FORMAT
fungsi inisumber
ini adalah salinan kode saya yang berfungsi memeriksanya, cara mengambil nama hari dari tanggal dalam sql
sumber
Jika Anda tidak ingin bergantung
@@DATEFIRST
atau menggunakanDATEPART(weekday, DateColumn)
, hitung sendiri hari dalam seminggu.Untuk minggu berbasis Senin (Eropa) paling sederhana adalah:
Untuk minggu berbasis Minggu (Amerika) gunakan:
Ini mengembalikan angka hari kerja (1 hingga 7) sejak 1 Januari masing-masing 7, 1753.
sumber
Anda dapat menggunakan
DATEPART(dw, GETDATE())
tetapi perlu diketahui bahwa hasilnya akan bergantung pada@@DATEFIRST
nilai pengaturan SQL server yang merupakan pengaturan hari pertama minggu (Di Eropa nilai default 7 yaitu hari Minggu).Jika Anda ingin mengubah hari pertama dalam minggu ke nilai lain, Anda bisa menggunakan
SET DATEFIRST
tetapi ini dapat memengaruhi di mana saja di sesi kueri yang tidak Anda inginkan.Cara alternatif adalah dengan secara eksplisit menentukan nilai hari pertama minggu sebagai parameter dan menghindari tergantung pada
@@DATEFIRST
pengaturan. Anda dapat menggunakan formula berikut untuk mencapainya saat membutuhkannya:di mana
@WeekStartDay
adalah hari pertama dalam seminggu yang Anda inginkan untuk sistem Anda (dari 1 hingga 7 yang berarti dari Senin hingga Minggu).Saya telah membungkusnya menjadi fungsi di bawah ini sehingga kami dapat menggunakannya kembali dengan mudah:
Contoh penggunaan:
GetDayInWeek('2019-02-04 00:00:00', 1)
Ini sama dengan mengikuti (tetapi tidak tergantung pada pengaturan DATEFIRST SQL server):
sumber
Anda mungkin menemukan versi ini bermanfaat.
sumber