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 .