По-долу са три опции за използване на T-SQL за връщане на първия ден от месеца в SQL Server.
Това може да бъде първият ден от текущия месец или първият ден от месеца въз основа на дадена дата.
Опция 1
Един от начините да го направите е така:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date); Резултат:
2035-10-01
Това включва използването на някои T-SQL функции за извършване на изместване на датата, за да се върне датата обратно в началото на месеца.
За повече информация относно DATEADD() и DAY() функции, вижте DATEADD() Примери в SQL Server и DAY() Примери в SQL Server.
Опция 2
Ето още една опция за получаване на първия ден от месеца:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0); Резултат:
2035-10-01 00:00:00.000
Тук включихме DATEDIFF() функция в нашето изчисление.
Въпреки че декларирахме първоначалната променлива като date стойност, резултатът е datetime стойност. Можем да използваме CONVERT() или CAST() за да конвертирате резултата в date стойност:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date); Резултат:
2035-10-01
Опция 3
Ето още една опция:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1; Резултат:
2035-10-01 00:00:00.000
Подобно на опция 2, резултатът е datetime стойност, но този път е така, защото сме декларирали променливата като datetime стойност. Въпреки това можем да му приложим същото третиране, за да го преобразуваме в date стойност:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date); Резултат:
2035-10-01
Причината, поради която не сме декларирали променливата като date стойност е, защото това би довело до грешка:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1; Резултат:
Msg 206, Level 16, State 2, Line 3 Operand type clash: date is incompatible with int
Това е така, защото се опитваме да добавим цяло число към date стойност, която не работи. Въпреки това добавянето на цяло число към datetime value работи и затова декларирахме променливата като datetime .