sql >> Databáze >  >> RDS >> Sqlserver

3 způsoby, jak získat první den v měsíci na serveru SQL

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 .


  1. Co je databáze, proč databáze?

  2. Jak zkontrolovat, zda je přepínač zaškrtnutý nebo vybraný v jQuery?

  3. GIS:PostGIS/PostgreSQL vs. MySql vs. SQL Server?

  4. ORA-00904:neplatný identifikátor