Níže jsou uvedeny tři možnosti, jak pomocí T-SQL vrátit první den v měsíci na SQL Server.
Může to být první den aktuálního měsíce nebo první den měsíce podle daného data.
Možnost 1
Jeden způsob, jak to udělat, je tento:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date); Výsledek:
2035-10-01
To zahrnuje použití některých funkcí T-SQL k provádění posunu data, aby se datum vrátilo na začátek měsíce.
Další informace o DATEADD() a DAY() funkce, viz DATEADD() Příklady v SQL Server a DAY() Příklady v SQL Server.
Možnost 2
Zde je další možnost, jak získat první den v měsíci:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0); Výsledek:
2035-10-01 00:00:00.000
Zde jsme začlenili DATEDIFF() funkce do našeho výpočtu.
Ačkoli jsme počáteční proměnnou deklarovali jako date výsledkem je datetime hodnota. Můžeme použít CONVERT() nebo CAST() převést výsledek na date hodnota:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date); Výsledek:
2035-10-01
Možnost 3
Zde je další možnost:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1; Výsledek:
2035-10-01 00:00:00.000
Podobně jako u možnosti 2 je výsledkem datetime hodnotu, ale tentokrát je to proto, že jsme proměnnou deklarovali jako datetime hodnota. Můžeme však s ním zacházet stejně a převést jej na date hodnota:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date); Výsledek:
2035-10-01
Důvod, proč jsme proměnnou nedeklarovali jako date hodnota je, protože by to vedlo k chybě:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1; Výsledek:
Msg 206, Level 16, State 2, Line 3 Operand type clash: date is incompatible with int
Je to proto, že se snažíme přidat celé číslo k date hodnotu, což nefunguje. Přidání celého čísla k datetime value funguje, a proto jsme proměnnou deklarovali jako datetime .