Di bawah ini adalah tiga opsi untuk menggunakan T-SQL untuk mengembalikan hari pertama setiap bulan di SQL Server.
Ini bisa menjadi hari pertama bulan ini, atau hari pertama dalam sebulan berdasarkan tanggal tertentu.
Opsi 1
Salah satu caranya adalah seperti ini:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);
Hasil:
2035-10-01
Ini melibatkan penggunaan beberapa fungsi T-SQL untuk melakukan pergeseran tanggal untuk mengembalikan tanggal ke awal bulan.
Untuk informasi lebih lanjut tentang DATEADD()
dan DAY()
fungsi, lihat DATEADD()
Contoh di SQL Server dan DAY()
Contoh di SQL Server.
Opsi 2
Berikut opsi lain untuk mendapatkan hari pertama setiap bulan:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);
Hasil:
2035-10-01 00:00:00.000
Di sini, kami memasukkan DATEDIFF()
fungsi ke dalam perhitungan kami.
Meskipun kami mendeklarasikan variabel awal sebagai date
nilai, hasilnya adalah datetime
nilai. Kita dapat menggunakan CONVERT()
atau CAST()
untuk mengonversi hasil menjadi date
nilai:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date);
Hasil:
2035-10-01
Opsi 3
Ini opsi lain:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Hasil:
2035-10-01 00:00:00.000
Mirip dengan opsi 2, hasilnya adalah datetime
nilai, tapi kali ini karena kami mendeklarasikan variabel sebagai datetime
nilai. Namun, kami dapat memberikan perlakuan yang sama untuk mengubahnya menjadi date
nilai:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date);
Hasil:
2035-10-01
Alasan kami tidak mendeklarasikan variabel sebagai date
nilai karena itu akan menghasilkan kesalahan:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Hasil:
Msg 206, Level 16, State 2, Line 3 Operand type clash: date is incompatible with int
Ini karena kami mencoba menambahkan bilangan bulat ke date
nilai, yang tidak berfungsi. Namun, menambahkan bilangan bulat ke datetime
value berfungsi, dan itulah sebabnya kami mendeklarasikan variabel sebagai datetime
.